2

Bashリファレンスマニュアルには、

文字列

[ -n文字列]

文字列の長さが 0 でない場合、どちらもtrueを返します

しかし、事実はそうではありません

greet=

if [ $greet ]; then
    echo '1'
else 
    echo '2'
fi

if [ -n $greet ]; then
    echo '1'
else
    echo '2'
fi

出力は
2
1です

Bashリファレンスマニュアルはちょうど言う

-n string  
string  

True if the length of string is non-zero.  

では、2 つの形式の実際の違いは何ですか?

4

3 に答える 3

1

-n オプションを使用する場合は、二重引用符を使用する必要があります。

 if [ -n "$greet" ]

文字列が空であるため、長さがゼロであるため、上記の式は false と評価されます。

 if [ "$greet" ] 

文字列が空であるため、これも false と評価されます。

さらに、空の文字列をチェックするには、-z オプションを使用できます。

if [ -z "$greet" ] 

文字列が空であるため、これは true になります。

このリンクもチェックしてください: http://tldp.org/LDP/abs/html/comparison-ops.html

于 2013-09-15T06:20:23.597 に答える
0

Bash は内で[はなく 内[[で単語分割を実行するため、 を使用する場合はパラメーターを引用符で囲む必要はありません[[

$ x=
$ [ -n $x ]; echo $?; [ -n "$x" ]; echo $?
0
1
$ [[ -n $x ]]; echo $?; [[ -n "$x" ]]; echo $?
1
1

type次のように表示[[ $x ]]され[[ -n $x ]]ます。

$ f() { [[ $x ]]; }; type f
f is a function
f ()
{
    [[ -n $x ]]
}
于 2013-10-13T00:00:14.983 に答える