В любой POSIX-совместимой оболочке вы можете сделать:
case $line in (*"$PWD"*)
# whatever your then block had
;;esac
Это работает в bash
, dash
, и практически в любой другой оболочке, которую вы можете назвать.
Его также можно использовать для простой обработки нескольких возможностей. Например:
case $line in
(*"$PWD"*)
echo \$PWD match\!
;;
(*"$OLDPWD"*)
echo \$OLDPWD match\!
;;
(*)
! echo no match\!
;;esac
Вы также можете использовать чередование:
case $line in (*"$PWD"*|*"$OLDPWD"*)
echo '$OLDPWD|$PWD match!'
;;esac
Обратите внимание на использование кавычек выше:
case $line ...
case
не будет разделен ни на $IFS
, ни использован в качестве шаблона для gen имен файлов. Это аналогично тому, как обрабатывается левый аргумент в тесте [[
. (*"$PWD "*)
$IFS
, ни генерации имен файлов - расширение без кавычек не будет ни разбивать, ни глобализировать. $PWD
содержит *
и не заключена в кавычки, то она будет истолкована как объект шаблона, а не как буквальное *
для поиска.