Em qualquer shell compatível com POSIX, você pode fazer:
case $line in (*"$PWD"*)
# whatever your then block had
;;esac
Isso funciona em bash
, dash
e praticamente qualquer outro shell que você possa nomear.
Ele também pode ser usado para lidar com várias possibilidades facilmente. Por exemplo:
case $line in
(*"$PWD"*)
echo \$PWD match\!
;;
(*"$OLDPWD"*)
echo \$OLDPWD match\!
;;
(*)
! echo no match\!
;;esac
Você também pode usar a alternância:
case $line in (*"$PWD"*|*"$OLDPWD"*)
echo '$OLDPWD|$PWD match!'
;;esac
Observe o uso da citação acima:
-
%código%
- O objeto de uma instrução
case $line ...
não será dividido em case
ou será usado como um padrão para nome de arquivo gen. Isso é semelhante à maneira como o argumento à esquerda em um teste $IFS
é tratado.
-
%código%
- Aqui também uma expansão de shell não está sujeita a
[[
ou geração de nome de arquivo - uma expansão sem aspas não será dividida nem glob.
- Mas uma expansão sem aspas aqui pode ser interpretada como um padrão em vez de uma sequência literal, e, portanto, uma expansão pode significar mais de uma coisa, dependendo se ela é citada ou não.
- É importante citar qualquer variável usada em um padrão que deva ser interpretado literalmente, da mesma forma que você poderia citar literalmente caracteres de padrão que você queria interpretar.
- Por exemplo, se
(*"$PWD"*)
continha um $IFS
e não fosse citado, ele seria interpretado como um objeto padrão e não como um literal $PWD
a ser pesquisado.