( test -n $st ) != ( test -z $st ) ですよね?

( test -n $st ) != ( test -z $st ) ですよね?

読んでいくうちに、

test -n $string==> 終了ステータスは0です$stringNULLではない、それ以外の場合は1

そして

test -z $string==> 終了ステータスは0です。$string 無効である、それ以外の場合は1

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

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

出力は次のようになります。

0
0

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

この奇妙な動作について説明できる人はいますか?

答え1

二重引用符で囲んでください$str

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

関連情報