シェルで10を超えるパラメーターを処理する方法


101

Linuxでbashシェルを使用していて、シェルスクリプトで10個を超えるパラメーターを使用したい


8
パラメータが10個あると、かなり混乱することに注意してください。おそらく、代わりにオプション(-a 1またはまたは--foo=bar)を使用する方が良いでしょう。参照してくださいman getoptman getoptsと、man bashそれを行うためのいくつかのオプションのために。
ミケル

回答:


158

中括弧を使用してそれらをオフに設定します。

echo "${10}"

次のように、位置パラメータを反復することもできます。

for arg

または

for arg in "$@"

または

while (( $# > 0 ))    # or [ $# -gt 0 ]
do
    echo "$1"
    shift
done

2
$ {10}はbashでも機能しますが、shの多くの実装では1桁の指定しか許可されないため、移植性が制限されます。
ウィリアムパーセル、2011

1
@William:元のレガシーBourneシェルなど、それを受け入れないシェルがいくつかありますが、別のコメント(Bash、dash、ksh、zsh)でリストしたシェルに加えて、csh、tcshでも動作しますおよびBusybox ash。
追って通知があるまで一時停止。

1
@WilliamPursell ${10}POSIXによって
Steven Penny

2
動作を心配する${10}必要があるのは、標準に準拠していない非常に古い実装を使用している場合のみです。たぶん歴史的関心があるだけでしょう...それでも私はこれを使用したことがありません!ベストプラクティスでは、繰り返されない限り10個の引数は多すぎると規定されているため"$@"、列挙するのではなく反復することになります。
ウィリアムパーセル16

22

次のようにして、0から255までの最大256個のパラメーターを設定できます。

${255}

5
限界はシェルに依存すると思います。Bash、dash、ksh、zshにはないようです。sh -c 'echo ${333}' /usr/bin/*
追って通知があるまで一時停止。

3
私の殻は快適に200万に達しますset $(seq 2097152); echo ${2097152}
Steven Penny
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.