(test -n $st)!=(test -z $st)そうですか?

(test -n $st)!=(test -z $st)そうですか?

私が読むと、

test -n $string$string==>そうであれば、終了ステータスは0です。nullではない、さもなければ1つ

そして

test -z $string==>終了ステータスが0の場合$string スペース、さもなければ1つ

しかし、この特定の例では(空の文字列を作成しようとしています)何かが欠けているようです。

#!/bin/sh
str=""
test -n $str
echo $?
test -z $str
echo $?

出力は次のとおりです。

0
0

ここに画像の説明を入力してください。

この奇妙な行動を説明できる人はいますか?

答え1

$str二重引用符の中に入れてください!

-nテストでは、文字列をテスト括弧内に配置する必要があります。 !-zで引用符で囲まれていない文字列を使用するか、括弧内に引用符で囲まれていない文字列をテストする(例7-6を参照)、通常は機能しますが、これは安全ではありません。常にテストされた文字列を引用します。その他の比較演算子

関連情報