一般的なシェル(bash、dash、kornshell)で機能するコマンドがあるかどうかを確認したいだけですか? line
変数にパスの一部が含まれているかどうかをチェックすることになっています。
if [[ $line =~ "$PWD"$ ]] ;then
はい、bashの最近のバージョンはこれを行うことができます:
$ pwd
/home/terdon
$ line="I'm in /home/terdon"
$ [[ "$line" =~ "$PWD"$ ]] && echo yes
yes
同じ構文がzshとkshで機能しますが、ダッシュでは機能しません。私の知る限り、dashにはそのような機能はありません。
正規表現は変数$line
endsが$PWD
であるかどうかをチェックしていることに注意してください。 $PWD
が$line
のどこかに一致するかどうかを確認するには、$
を削除します。
$ line="I'm in /home/terdon, are you?"
$ [[ "$line" =~ "$PWD" ]] && echo yes
yes
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
に*
が含まれていて、引用符で囲まれていない場合、検索されるリテラル*
ではなく、パターンオブジェクトとして解釈されます。