добавить символ перед строкой с совпадающим шаблоном [дубликат]

0
13.10.2016, 01:35
1 ответ

Условное выражение [[..]] требует пробелов вокруг операторов и значений, то есть

[[ "${array[$i]}" = "$userInput" ]]
  instead of 
[["${array[$i]}"="$userInput"]]

(последнее интерпретируется как одно слово, и оболочка пытается найти команду с этим именем.)

Кроме того, $ {! array [@]} дает вам индексы для массива. Я не уверен, что вы хотите, поскольку в сценарии вы распечатываете индекс с помощью echo $ i , но ваш пример вывода, похоже, содержит строку, хранящуюся в массиве. Если индексы в частности не нужны, вы можете просто использовать для значения в "$ {array [@]}" .

Затем, если вы хотите сопоставить частичный шаблон, вам нужно явно указать оболочке, что все, что до и после шаблона должно быть принято: [["$ var" = * $ pattern *]] (без кавычек вокруг шаблона). (См. здесь )

Итак, перефразируя немного:

A=("abc" "def" "ghi")
pat=e
for val in "${A[@]}"; do 
    [[ "$val" = *$pat* ]] && echo -n "~"
    echo "$val"
done

печатает

abc
~def
ghi
1
28.01.2020, 02:47

Теги

Похожие вопросы