Bash - 先行スペースを持つ変数のパラメータ拡張

Bash - 先行スペースを持つ変数のパラメータ拡張

私はいつもシェルのパラメータ拡張に関する奇妙な規則について疑問に思いました。

宣言したら

NUMBERS="  one   two   "

次のコマンドを実行すると(変数文字列と定数文字列の間にスペースを含めないでください。)

echo ${NUMBERS}'and three'

Bash(およびDashとKornshell)は次のように応答します。

one two and three

ただし、同じ出力がエコーされます。

echo ${NUMBERS} 'and three'

私の印象によると、2.6.5 フィールド分割規則3a、変数を拡張するとき、入力の始まりと終わりのIFSスペースは無視する必要がありますNUMBERS

シェルが拡張文字列と定数文字列の間にスペースを入れる場合もあり、そうでない場合もあるのはなぜですか?

ベストアンサー1

フィールド分割が発生します。後ろに拡張し、IFS先行および末尾のスペースを無視します。みんな入力(最初の「論理」フィールドの前または最後のフィールドの後にフィールドが生成されないようにするため)、したがってフィールド分割を実行するときの最初の例は次のとおりです。

echo   one   two   'and three'

これはフィールドとして解析され、one同様に2番目の例は次のとおりですtwoand three

echo   one   two    'and three'

また、フィールドととして解析されますonetwoand three

おすすめ記事