O [[ .. ]]
condicional precisa de espaços em branco em torno dos operadores e valores, ou seja,
[[ "${array[$i]}" = "$userInput" ]]
instead of
[["${array[$i]}"="$userInput"]]
(Este último é interpretado como uma palavra, e o shell tenta encontrar um comando com esse nome.)
Além disso, ${!array[@]}
fornece os índices para o array. Não tenho certeza se é isso que você quer, já que no script você imprime o índice com echo $i
, mas a saída de amostra parece conter a string armazenada na matriz. Se não precisar dos índices em particular, você pode usar apenas for value in "${array[@]}"
.
Então, se você quer combinar um padrão parcial, você precisa explicitamente dizer ao shell que qualquer coisa antes e depois do padrão deve ser aceita: [[ "$var" = *$pattern* ]]
(sem aspas ao redor do padrão). (Veja aqui )
Então, parafraseando um pouco:
A=("abc" "def" "ghi")
pat=e
for val in "${A[@]}"; do
[[ "$val" = *$pat* ]] && echo -n "~"
echo "$val"
done
imprime
abc
~def
ghi