コマンド: [ -z "" ] && エコ 0 ||

コマンド: [ -z "" ] && エコ 0 ||

実行すると[ -z "" ] && echo 0 || echo 1出力が表示されます0。このコマンドは何ですか?どう説明しますか?

答え1

Bash(および同様のシェル)では、when is評価されていないか評価できない単純な文の慣用的な[ x ] && y || z省略形です。簡単なテストのために、貴重な画面/エディタの垂直スペース5行を無駄にしたくない場合に便利です。if [ x ] ; then y ; else z ; fiyfalse

「慣用的」という言葉は、これが一般的なシェルプログラムであるということです。シェルで論理AND(&&)とOR()がどのように機能するかを活用する方法です。||trueの場合は y実行します。偽の場合は実行してください。問題は次のとおりです。xzxz返品xtrueの場合は実行され、y実行されますがfalseと評価されます(つまり、ゼロ以外の終了コードを返します)。いいえこれが発生する可能性がある場合は使用してください。たとえば[ -z "" ] && false || echo 1-z ""条件が true でも「1」が出力されます。

つまり、次の(ほぼ)同じです。

if [ -z "" ] ; then
  echo 0
else
  echo 1
fi

この完全な形態のif; then ... ; else ... ; fi構造は、短縮された形態と同じ欠点を経験しない。この構成は正確で常に動作しますが、速記はいくつかの限られた状況で役に立つ迅速で汚いトリックです。

-z文字列が空であることをテストします。

このコマンドの英語は次のとおりです。

空の文字列が空の場合は「0」を表示し、それ以外の場合は「1」を表示します。

常に「0」と表示されます。

関連情報