[[$ variable]]と[[-n $ variable]]の違いは何ですか?


8

bashでは[[ $variable ]][[ -n $variable ]]完全に同等ですか?以下の出力から判断するとそうなのかと思われますが、シェルスクリプトでは両方の使用方法が見られます。

$ z="abra"
$ [[ $z ]]
$ echo $?
0
$ [[ -n $z ]]
$ echo $?
0
$ z=""
$ [[ $z ]]
$ echo $?
1
$ [[ -n $z ]]
$ echo $?
1
$ unset z
$ [[ $z ]]
$ echo $?
1
$ [[ -n $z ]]
$ echo $?
1

うーん。面白い。からの出力[[ -n $(echo -ne "\0") ]]; echo $?[ -n $(echo -ne "\0") ]; echo $?異なる
dchirikov 2013年

二つ目には、あなたはそれがされてしまったので、コマンド置換を引用するのを忘れたためだ@dchirikov、 [ -n ]、同じことを[ -n -n ]。zsh以外のシェルでは、コマンド(組み込み)の引数またはシェル変数にNUL文字を含めることはできません。
ステファンChazelas

回答:


4

[ "$var" ][ -n "$var" ]最近のbashおよびほとんどのシェルと同等です。他の古いシェルでは、それらは同等であることを意図していますが、やのような "$ var"のいくつかの特別な値のために異なるバグに悩まされています。=(!

私が見つけ[ -n "$var" ]、より読みやすいとのペンダントです[ -z "$var" ]

[[ -n $var ]][[ $var ]]非標準のksh構文が実装されているすべてのシェルと同じです。

test "x$var" != x あなたが非常に古いシェルに移植したいなら、最も信頼できるでしょう。


1

よるとbashの中の非ゼロの長さの文字列のテスト:または[「$ VAR」] [「$ VAR」-n] 、はい、彼らは同じです。

変数の名前を引用しても同等です。

注意することが重要です:私が引用する質問の名前はのみを参照し[ていますが、回答では[およびの両方を考慮してい[[ます。


1
しかし[[]][]:) と同等ではありません
dchirikov 2013年

いいえ、そうではありません。しかし、私が引用する答えでは、両方の形式が考慮されます。
nozimica 2013年

変数として「\ 0」をテストする際の動作は異なります。演算子[]は0または1を示し、[[]]はどちらの場合も1を示します。
dchirikov 2013年

非常に有益なリンクの+1ですが、私が受け入れたStephane Chazelasの回答はより重要です。
iruvar 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.