[ -n ]-nテストを使用しません。
-n中には、[ -n ]すべてのテストではありません。[との間に引数が1つしかない場合]、その引数は空かどうかを確認するためにテストされる文字列です。文字列の先頭-にがある場合でも、テストではなくオペランドとして解釈されます。文字列以来-n空でない-それは2つの文字が含まれている、-とn、ないゼロcharacters-- [ -n ]TRUEと評価。
以下のようイグナシオバスケス-エイブラムス氏は述べています。ここで、string単一の引数で、テストは上で実行string中で、その上に実行されるテストと同じです。である場合、特別なことは何も起こりません。第二で単に空虚のためにテストされている文字列です。[ string ][ -n string ]string-n-n[ -n ]-n[ -n -n ]
[との間に引数が1つしかない場合]、その引数は、テストと同じ名前が付けられたとしても、常に空でないかどうかをテストする文字列です。同様に、との間に2つの引数が[あり]、最初の引数がである-n場合、2番目の引数は、テストと同じ名前が付けられた場合でも、常に空でないことをテストする文字列です。これは、単純に、前後の[単一の引数が文字列オペランドである[と主張するためです。]-n
同じ理由で[ -n ]使用していない-nテストを、[ -z ]使用しない-zテストを。
あなたはについての詳細を学ぶことができる[でbashそれのヘルプを調べることによって。それは組み込みのシェルであることに注意してください:
$ type [
[ is a shell builtin
したがって、実行help [してヘルプを取得できます。
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
どのテストがサポートされているか、どのように機能するかなどの詳細については、ヘルプを参照する必要がありtestます。コマンドを実行するとhelp test、詳細なリストが表示されます。すべてを再現するのではなく、文字列演算子に関する部分を次に示します。
-z STRING True if string is empty.
-n STRING
STRING True if string is not empty.
STRING1 = STRING2
True if the strings are equal.
STRING1 != STRING2
True if the strings are not equal.
STRING1 < STRING2
True if STRING1 sorts before STRING2 lexicographically.
STRING1 > STRING2
True if STRING1 sorts after STRING2 lexicographically.
ことに注意してください-n STRINGとだけSTRING文字列があれば、彼らはテスト:同じことを行うSTRING空ではありません。
[ -t ]stdoutがターミナル(のために短いものだったかどうかをテストしていた[ -t 1 ])と一部のシェルは、まだ(の場合にはそれをやっているksh93ことは、ときにのみ-t、それが使用することをお勧めしますので、リテラルである)[ -n "$var" ]より[ "$var" ]。それはまだいくつかの古いに失敗するであろうけれどもtestの値の実装$varのような=、その場合には、[ "" != "$var" ]あるいは[ "x$var" != x ]またはcase $x in "")...より良いかもしれません。