Bash:ドル記号を含むテスト文字列

Bash:ドル記号を含むテスト文字列

テストコマンドでドル記号$の奇妙な動作を説明できる人はいますか?

[ "$a" != "$b" ]
echo $?
1
[ "$a" != "b" ]
echo $?
0

なぜtest "$a" != "$b" ゼロではなく1を返しますか?

答え1

$変数や特殊パラメータ(など)などのパラメータを拡張するために使用できるbashの特殊文字。$?二重引用符で囲まれた文字列で使用するには\

$ [ "\$a" != "\$b" ]
$ echo "$?"
0

または、二重引用符の代わりに一重引用符(特に扱われる文字がない場合)を使用してください。

$ [ '$a' != '$b' ]
$ echo "$?"
0

答え2

テスト式は二重引用符内でおよびを$a使用するため、$bシェルはそれを変数として解釈してその値に置き換えます。

コードで変数ab設定されていない可能性があります。これは$a、とが$b同じ値(空の文字列)であることを意味します。したがって、"$a" != "$b"テストは false(1) になります。

比較したい場合ひも $aたとえば$b、二重引用符の代わりに一重引用符を使用します。

if [ '$a' != '$b' ]; then ...; fi

これにより、文字列が変数拡張から保護されます。

関連情報