2016-09-21 6 views
0

通常、私は[[すべての種類のテストケースでは、最も進んだ方法であり、より安全です(Regex、.. )。 私は[[、しかし、マンページと様々な文書に従って、少なくとも "-n"のようなオプションを同じ方法で処理するはずですが、そうではありません。バッシュゼロ以外のテストケース(-n)、[[[別のものをやっている]

-n STRING STRINGの長さがゼロでない

VAR= 

if [[ -n $VAR ]] 
then 
     echo "\$VAR is nonzero" 
else 
     echo "\$VAR is zero" 
fi 

の$ VARがゼロ

VAR= 

if [ -n $VAR ] 
then 
     echo "\$VAR is nonzero" 
else 
     echo "\$VAR is zero" 
fi 

の$ VARが、これはどのように

ゼロであるです偶数可能?

bashの4.1.2(1)

答えて

1

私はあなたの問題は引用符に関連していると思います。

あなたが[ -n $VAR ]を使用する場合に実行されるコマンドは$VARがあるべき任意の引数は含まれません。

$ set -x 
$ [ -n $VAR ] 
+ '[' -n ']' 

これは、あなたが、本質的に以下のための文字列-nは、非空であるかどうかをテストしていることを意味し二つの試験は等価です:

012:あなたが引用符を使用する場合は

[ string ] # is a shorthand for 
[ -n string ] # which is always true! 

は、その後、あなたは異なる動作を取得します

ここで、変数が空でないかどうかをテストして、期待される動作を得るようにします。

0

Quoting[で使用する変数を引用する必要があります。

$ VAR=  
$ [ -n $VAR ] 
$ echo $? 
0 
$ [ -n "$VAR" ] 
$ echo $? 
1 
関連する問題