位置引数の構文 `${18}`に中括弧が必要なのはなぜですか?

位置引数の構文 `${18}`に中括弧が必要なのはなぜですか?

私は現在コマンドラインを学んでおり、位置パラメータについて学んでいます。位置パラメータが9で終わることを確認しました。 $9 以上を使用するには、中かっこ内に入れる必要があります (例: ${18})。しかし、9つの位置パラメータがあり、もはや$ 18の外観を設定できないという話は何ですか?

ベストアンサー1

位置パラメータリストは、現在のリソース制約が許可する限り、必要なだけ長くすることができます。これは、リストに9つ以上の要素がある可能性があることを意味します。ご覧のとおり、要素10以上は、図のように数字の周りに中括弧を追加することでアクセスできます${12}

ほとんどの POSIX 様シェルでは、POSIX 標準に従って要素 9 以降の要素にアクセスするには中かっこが必要です。

位置パラメーターは、1 つ以上の数値 (1 桁の 0 を除く) で表される 10 進値で表されるパラメーターです。位置引数を表す数字は、前にゼロがあっても常に小数値として解釈する必要があります。複数の数字が位置引数として指定されている場合、アプリケーションはその数字を中括弧で囲む必要があります。

ここから、「シェルコマンド言語:位置パラメータ」)

上のテキストで「アプリケーション」という言葉は「あなたのスクリプト」を意味します。

パラメータ拡張の最も簡単な形式は次のとおりです。

${parameter}

(存在する場合)値をparameter変更する必要があります。

パラメータ名または記号は、オプションの中括弧で囲むことができます。2桁以上の位置パラメータを除くまたは、引数が名前の後に名前の一部として解釈できる文字が続く場合。

ここから、「シェルコマンド言語:パラメータ拡張」)

また、最初のいくつかの位置パラメータ以外の他のパラメータを処理することにも注意してください。まっすぐこれは非常にまれです。 andにアクセスする$1のは一般的ですが、$2and$3を他の目的に使用することはまれです。より一般的なのは、次のリストを繰り返すことです。

for argument do
    # use "$argument" here
done

...またはリスト全体を一度に使用します"$@"

また、一部のシェルはこの標準を無視することもできます。これはzshPOSIXに厳密に準拠しようとしないシェルです。

$ set -- a b c d e f g h i j k l m n o p
$ print $13
m
$ print $16
p

...模倣しない限りsh

$ emulate sh
$ print $13
a3

文字列a3は出力から来て$1から3

おすすめ記事