テストコマンドでドル記号$の奇妙な動作を説明できる人はいますか?
[ "$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
シェルはそれを変数として解釈してその値に置き換えます。
コードで変数a
とb
設定されていない可能性があります。これは$a
、とが$b
同じ値(空の文字列)であることを意味します。したがって、"$a" != "$b"
テストは false(1) になります。
比較したい場合ひも $a
たとえば$b
、二重引用符の代わりに一重引用符を使用します。
if [ '$a' != '$b' ]; then ...; fi
これにより、文字列が変数拡張から保護されます。