演算子の周囲にスペースがある場合、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 が返されます。