テストは演算子の周りにスペースがあるかどうかによって無効な値を返しますが、エラーはありません。

テストは演算子の周りにスペースがあるかどうかによって無効な値を返しますが、エラーはありません。

演算子の周囲にスペースがある場合、test式の正しい値が返されます。

ただし、空白がない場合、構文エラーは発生せず、常にtrueを返します。

$ test "A" == "A"; echo $?
0 #<-- OK, 0 stands for true
$ test "A" == "B"; echo $?
1 #<-- OK, 1 stands for false
$ test "A"=="A"; echo $?
0 #<-- OK, 0 stands for true
$ test "A"=="B"; echo $? 
0 #<-- ??? should either return 1 (false), or throw a syntax error (exit code > 1)

答え1

これは構文に問題がないためです。test "A"=="B"と同じで、test foo文字列をテストし、文字列が空でないため、trueを返します。これについては、test次のセクションで説明しますman bash

testそして、[引数の数に応じて一連の規則を使用して条件式を評価します。

  • パラメータ0

    表現が間違っていますね。

  • パラメータ1個

    引数が空でない場合にのみ、式は true です。

パラメータは空白として定義されるため、周囲の空白がないため、==文字列全体が"A"=="B"単一のパラメータとして解析されます。

動作中です。

$ test foo; echo $?
0
$ test ""; echo $?
1

上記のように、空の文字列を渡すと false が返されますが、空でない文字列を渡すと true が返されます。

関連情報