Unixの位置パラメータについて読んでいましたが、次のことがわかりました。
シェルでは、コマンドラインに少なくとも128個の引数を含めることができますが、シェルプログラムは、指定された時間に$ 1から$ 9までの9つの位置引数を参照するように制限されています。 Shiftコマンドを使用してこの制限を解決できます。
だから私は次の簡単なシェルスクリプトを作成しましたfile
。
#! /bin/bash
echo $14
次に、次のように実行します。
./file 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
私は14個を得ました!
shift
もしそうなら、シェルがコマンドを使用せず、10個以上の引数($ 0から$ 9まで)を許可しない場合、これはどのように可能ですか?
答え1
走るとき
echo $14
何が起こるかは、bashが引数を個別に解釈するということ$14
です。その後、拡張され(この場合は「1」と同じ)、文字列が追加されて「14」になります。これが期待したものですが、実際にはBashが実際に機能する方法の副作用です。コメントに記載されている@steeldriverのように、次のようにスクリプトを実行します。$1
4
$1
4
./file a b c d e f g h i j k l m n
その後、呼び出しはecho $14
「n」ではなく「a4」を出力します。
変数は二重引用符で囲まれています。
echo "$14"
Bashでは、変数はまだ正しく拡張されません。標準的なアプローチは、変数名の周りに中かっこを使用することです。
echo ${14}
詳しくは公式ドキュメントをご覧ください。パラメータ拡張バッシュから。また、次のようなより素晴らしいことがたくさんあります。
${14^^*}
パラメータ番号14を大文字で表します。読んで! :)