文字列比較前の追加文字

文字列比較前の追加文字

一部のbashコードでは、文字列を比較する前に追加の文字が追加されていることがわかります。誰でも理由を説明できますか?

if [ "x$VAR" = "xString" ]; then
...
fi

答え1

これは、変数が設定解除される可能性を防ぐためのものであることがわかります。たとえば、次のことを考えてみましょう。

if [ $x = "hi" ]; then echo $x; fi

xに設定すると、hi動作は次のようになります。

$ if [ $x = "hi" ]; then echo $x; fi
hi
$

ただしx、設定されていない場合は左側に何もないため、エラーが発生します=

$ if [ $x = "hi" ]; then echo $x; fi
zsh: parse error: condition expected: =

引用符を追加すると問題が解決します。

$ if [ "$x" = "hi" ]; then echo $x; fi
$

また、空白以外の値を追加すると問題が解決します。

$ if [ x$x = "xhi" ]; then echo $x; fi
$ x=hi
$ if [ x$x = "xhi" ]; then echo $x; fi
hi
$

答え2

引用符なしで見たことがあります。[ x$VAR = xstring ]

何らかの理由でVARが定義されていないと、何も拡張されず、スクリプトソルバーは次のエラーを表示します-bash: [: =: unary operator expected。 (つまり、ソルバーはこれを見て[ = string ]抗議します。)追加の文字を追加すると、次のことが保証されます。 「nothing」は「yes」ですが、まだ有効です=。引用符を使用すると、このようなエラーは発生しませんが、多くの人は習慣的に文字を追加し、引用符に多くの注意を払うことはありません。

答え3

これは、文字列が$VARIABLE空であっても空にならないようにするために行われます。bash構造

if [  $var = Y ]

もしそうなら、$varそれは間違った行動です""

関連情報