変数拡張時のデフォルト値のメタ文字処理

変数拡張時のデフォルト値のメタ文字処理

(たとえば${varname-default})変数を拡張するためのデフォルト値が指定されている場合、設定された文字はどのようにdefault解釈されますか?

'素直に言えば、変数の置換(例:$ b)と引用符のような文字拡張、、"この場合に起こると思います\...しかし、引用符のような文字拡張が常に発生するわけではありません。

例えば、

> echo x${a-''}y
xy

しかし、

> echo x"${a-''}"y 
x''y

私は両方のケースで、xy同じ拡張変数のコンストラクタがうまく動作すると予想しました。${a-$PATH}( BRACE='}'; echo ${a-$BRACE} )

ただしGNU bash, version 4.4.19(1)-release、... 2つのバージョンの最新バージョンは、文字通り2番目の例の出力に含まれるのとmksh同じ動作を持ちます。''

答え1

いくつかの拡張があります${parameter:-[word]}

~から男乱交:

以下の各ケースでは、言葉チルダ拡張、パラメータ拡張、コマンド置換、算術拡張が可能です。

~からPOSIX仕様:

言葉チルダ拡張、パラメータ拡張、コマンド置換、および算術拡張を実行する必要があります。

両方とも同じように報告し、両方を実行する含まれていません「参照の削除」。

引用符が削除されました。後ろにフル変数拡張が完了しました。しかし、これがどのように行われるかを正確に示すことは困難です。

$ sh
$ unset b
$ set -x
+ set -x
$ echo 1 ${b-e}
+ echo 1 e
1 e
$ echo 2 ${b-"e"}
+ echo 2 e
2 e
$ echo 3 ${b-'e'}
+ echo 3 e
3 e
$ echo 4 "${b-e}"
+ echo 4 e
4 e
$ echo 5 "${b-"e"}"
+ echo 5 e
5 e
$ echo 6 "${b-'e'}"
+ echo 6 'e'
6 'e'
$ set +x
+ set +x

または:

$ $ set -x; echo 1 x${b-e}y; echo 2 x${b-"e"}y; echo 3 x${b-'e'}y; echo 4 "x${b-e}y"; echo 5 "x${b-"e"}y"; echo 6 "x${b-'e'}y"; set +x
+ echo 1 xey
1 xey
+ echo 2 xey
2 xey
+ echo 3 xey
3 xey
+ echo 4 xey
4 xey
+ echo 5 xey
5 xey
+ echo 6 x'e'y
6 x'e'y
+ set +x
$ 

関連情報