web-dev-qa-db-ja.com

シェルスクリプト内のプログラムにコマンドラインパラメーターを渡す

./script.sh arg1 [arg2 arg3 ...]については、コマンドライン引数arg1arg2、...は$1$2、...によって取得できますが、引数は[〜#〜] not [〜#〜]固定です。

シェルスクリプトで、arg2から始まる引数をプログラムに渡します。

#/bin/bash
...
/path/to/a/program [I want to pass arg2 arg3 ... to the program]
...

1つ以上の引数がある可能性があるので、どうすればそれができますか?

16
Lee

通常の方法はarg1"$1")のコピーを保存し、パラメーターを1つシフトすることです。これにより、リスト全体を"$@"として参照できます。

#!/bin/sh
arg1="$1"
shift 1
/path/to/a/program "$@"

もちろんbashは配列をサポートしていますが、提起されている質問には必要ありません。

arg1もオプションである場合は、次のように確認します。

if [ $# != 0 ]
then
    arg1="$1"
    shift 1
fi
18
Thomas Dickey

パラメータ展開を使用して、位置パラメータをスライスできます。構文は次のとおりです。

${parameter:offset:length}

lengthを省略すると、最後の値までと見なされます。

2番目から最後の引数を渡すため、次のものが必要です。

${@:2}

例:

$ foo() { echo "${@:2}" ;}

$ foo bar spam Egg
spam Egg
10
heemayl