Я бы избегал =~
здесь, потому что, как указывает FatalError, он будет интерпретировать $X
как регулярное выражение, и это может привести к неожиданным ошибкам (особенно потому, что это расширенное регулярное выражение, поэтому в нем больше специальных символов, чемстандартный синтаксис grep).
Вместо этого вы можете просто использовать ==
, потому что bash рассматривает RHS ==
как шаблон сглаживания:
read MYINPUT
alertWords=($(<"AlertWordList"))
for X in "${alertWords[@]}"
do
# the wildcards in my expression do work :-)
if [[ $MYINPUT == *"$X"* ]]
then
echo "#1 matched"
else
echo "#1 nope"
fi
done
Я также удалил использованиеcat в вашем назначении alertWords
, поскольку он сохраняет чтение файла внутри оболочки, а не порождает другой процесс для этого.