./script.sh arg1 [arg2 arg3 ...]
については、コマンドライン引数arg1
、arg2
、...は$1
、$2
、...によって取得できますが、引数は[〜#〜] not [〜#〜]固定です。
シェルスクリプトで、arg2
から始まる引数をプログラムに渡します。
#/bin/bash
...
/path/to/a/program [I want to pass arg2 arg3 ... to the program]
...
1つ以上の引数がある可能性があるので、どうすればそれができますか?
通常の方法はarg1("$1"
)のコピーを保存し、パラメーターを1つシフトすることです。これにより、リスト全体を"$@"
として参照できます。
#!/bin/sh
arg1="$1"
shift 1
/path/to/a/program "$@"
もちろんbashは配列をサポートしていますが、提起されている質問には必要ありません。
arg1もオプションである場合は、次のように確認します。
if [ $# != 0 ]
then
arg1="$1"
shift 1
fi
パラメータ展開を使用して、位置パラメータをスライスできます。構文は次のとおりです。
${parameter:offset:length}
length
を省略すると、最後の値までと見なされます。
2番目から最後の引数を渡すため、次のものが必要です。
${@:2}
例:
$ foo() { echo "${@:2}" ;}
$ foo bar spam Egg
spam Egg