"Вы не можете добраться отсюда"
Мне нравится использовать case для сопоставления с образцом, но в этой ситуации вы пересекаете границы того, для чего подходит оболочка Bourne.
есть два способа решения этой проблемы:
за счет вилки, вы можете использовать egrep
pattern="this|that|those"
if
echo "foo" | egrep "$pattern" > /dev/null 2>&1
then
echo "found"
else
echo "not found"
fi
Вы также можете сделать это только с помощью встроенных модулей, используя цикл. В зависимости от ситуации это может замедлить работу вашего кода в миллиард раз, поэтому убедитесь, что вы понимаете, что происходит с кодом.
pattern="this|that|those"
IFS="|" temp_pattern="$pattern"
echo=echo
for value in $temp_pattern
do
case foo
in
"$list") echo "matched" ; echo=: ; break ;;
esac
done
$echo not matched
Это явно шоу ужасов, пример того, как сценарии оболочки могут быстро выйти из-под контроля, если вы попытаетесь заставить что-либо сделать хоть что-то немного не по карте.