Условное выражение [[..]]
требует пробелов вокруг операторов и значений, то есть
[[ "${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