23

これはコードです

a=''
b=john
c=${a-$b}
echo $c

そして出力は空行です

そして、最初の変数が初期化されていない同様のコードの場合

b1=doe
c1=${a1-$b1}
echo $c1

そして、出力は

doe

さまざまな結果につながる変数の展開を bash がどのように処理するかがわかりません。

4

1 に答える 1

53

表記には2つのバリエーションがあります。1つ${var-value}はコロンなし(図のように)、もう1つはコロン付きです${var:-value}

コロンのない最初のバージョンは、'$var任意の値(空の文字列を含む)に設定されている場合はそれを使用することを意味します。それ以外の場合は、value代わりに'を使用してください。

コロン付きの2番目のバージョンは、'$var空の文字列以外の値に設定されている場合は、それを使用することを意味します。それ以外の場合は、value代わりに'を使用してください。

このパターンは、他の変数置換にも当てはまります。特に、次のようになります。

  • ${var:=value}
    • $var空でない文字列に設定されている場合は、変更しないでください。それ以外の場合は、に設定$varvalueます。
  • ${var=value}
    • $varが任意の値(空の文字列を含む)に設定されている場合は、変更しないでください。それ以外の場合は、に設定$varvalueます。
  • ${var:?message}
    • $var空でない文字列に設定されている場合は、何もしません。messageそれ以外の場合は、指定されたメッセージを使用して文句を言います'(それ自体が空の場合はデフォルトのメッセージが提供されます)。
  • ${var?message}
    • $varが任意の値(空の文字列を含む)に設定されている場合は、何もしません。それ以外の場合は、指定されたメッセージを使用して文句を言います。

これらの表記はすべて、POSIX互換のシェル(Bourne、Korn、Bashなど)に適用されます。bashこのバージョンのマニュアルは、オンラインの「シェルパラメータ拡張」セクションにあります。Bashには多くの非標準表記もあり、その多くは非常に便利ですが、必ずしも他のシェルと共有されているわけではありません。

于 2013-01-04T06:59:55.577 に答える