これはコードです
a=''
b=john
c=${a-$b}
echo $c
そして出力は空行です
そして、最初の変数が初期化されていない同様のコードの場合
b1=doe
c1=${a1-$b1}
echo $c1
そして、出力は
doe
さまざまな結果につながる変数の展開を bash がどのように処理するかがわかりません。
これはコードです
a=''
b=john
c=${a-$b}
echo $c
そして出力は空行です
そして、最初の変数が初期化されていない同様のコードの場合
b1=doe
c1=${a1-$b1}
echo $c1
そして、出力は
doe
さまざまな結果につながる変数の展開を bash がどのように処理するかがわかりません。
表記には2つのバリエーションがあります。1つ${var-value}
はコロンなし(図のように)、もう1つはコロン付きです${var:-value}
。
コロンのない最初のバージョンは、'$var
任意の値(空の文字列を含む)に設定されている場合はそれを使用することを意味します。それ以外の場合は、value
代わりに'を使用してください。
コロン付きの2番目のバージョンは、'$var
空の文字列以外の値に設定されている場合は、それを使用することを意味します。それ以外の場合は、value
代わりに'を使用してください。
このパターンは、他の変数置換にも当てはまります。特に、次のようになります。
${var:=value}
$var
空でない文字列に設定されている場合は、変更しないでください。それ以外の場合は、に設定$var
しvalue
ます。${var=value}
$var
が任意の値(空の文字列を含む)に設定されている場合は、変更しないでください。それ以外の場合は、に設定$var
しvalue
ます。${var:?message}
$var
空でない文字列に設定されている場合は、何もしません。message
それ以外の場合は、指定されたメッセージを使用して文句を言います'(それ自体が空の場合はデフォルトのメッセージが提供されます)。${var?message}
$var
が任意の値(空の文字列を含む)に設定されている場合は、何もしません。それ以外の場合は、指定されたメッセージを使用して文句を言います。これらの表記はすべて、POSIX互換のシェル(Bourne、Korn、Bashなど)に適用されます。bash
このバージョンのマニュアルは、オンラインの「シェルパラメータ拡張」セクションにあります。Bashには多くの非標準表記もあり、その多くは非常に便利ですが、必ずしも他のシェルと共有されているわけではありません。