質問: "" ]私はいくつかのスクリプトで2番目のものを書いているのを見つけましたが、それから here を-zは同じことを実現します。2番目の問題の使用に問題がある場合、最初の問題が少し良く見えることを無視すべきでしょうか?
回答: [ "$1" = "" ]と[ -z "$1" ]は、bashと他のposix準拠のシェルではまったく同じです。 (;のような単語を構成しない文字がない限り、角括弧の両側にスペースが必要です。)[は、他と同じように組み込みのシェルです。実際、testと表記することもできます(2つの違いは、[が最後の引数として]を必要とすることです)。したがって、[ "$1" = "" ]を$1に拡張して-zを実行すると、テストオペレーターには-z、=、空の文字列の3つの引数が表示されます。一部の古い bourne シェルは、完全な式にあいまいさがなくても、オペランドがこのように演算子のように見えると、解析エラーをスローすることがありました。この特定の式で実際に問題があったバージョンがあったかどうかはわかりませんが、より複雑な式を使用すると、それらが破棄される可能性があります。空の単語で問題があったバージョンもあったかもしれません。これらも[ -z "$1" ]をサポートしていなかったでしょう。一般的なシェルイディオムは[ x"$1" = x"" ]です。演算子が文字で始まっていないため、オペランドが演算子として解析されるリスクを回避できます。ksh、bash、およびzshでは、二重ブラケット構文[[ -z $1 ]]を使用できます。この新しい構文(1970年代半ばではなく1980年代後半から)は、通常の組み込みではなく特別な構文構造を使用して、オペランドを演算子として解析するリスクを排除します。演算子は、二重括弧内で引用符で囲まずに文字どおりに表示する必要があり、変数展開を二重引用符で囲む必要はありません。