2013-08-19 1 views
10

これは最も考えられた質問ではないかもしれませんが、それにもかかわらず、私の好奇心を打ちました。私はWeb上で(まったく決定的なものではありませんが)答えを見つけることができませんでした。なぜ9の後のbashコマンドライン引数は中括弧を必要としますか?

アドバンストシェルスクリプトを読んでいるうちに、9番目の引数の後ろにあるものが$ {}(可変参照/置換の長い形式)に囲まれていなければならないことを示すコマンドラインの位置引数についてはthis sectionでした。

簡単に言えば、なぜコマンドライン引数10(以降)を$10, $11, ...の代わりに${10}, ${11}...と参照する必要がありますか?

+11

履歴;元のBourneシェルは '$ 12'を' $ {1} 2'と解釈しました(そして '$ {12}' AFAICRを許可しませんでした)。 –

答えて

6

具体的には、質問は「位置パラメータ」に関するものです。 $ {var}の代わりに$ varを使うのは、bashの略語です。ほとんどの場合、正常に動作します。 Bash変数は、文字またはアンダースコアで始まる必要があります。内部的には、数字で始まる変数を「位置パラメータ」として扱います。 bashが位置パラメータを検出すると、最初の桁のみが表示されるため、$ 10は$ 1 "0"を返します。 $ {10}を呼び出すことで、最初の数字の組み込みデフォルトの代わりに、完全な変数を見るようにbashに指示します。

なぜこの方法ですか?何も思いつきません。拡張されたレガシーの実装は私の推測です。 "誰が....より多くを必要とするだろうか?"

関連する問題