シェルスクリプト内のプログラムにコマンドライン引数を渡す

シェルスクリプト内のプログラムにコマンドライン引数を渡す

./script.sh arg1 [arg2 arg3 ...]、、...コマンドラインパラメータはarg1、、、...で取得できますが、arg2パラメータの数は次のとおりです。$1$2いいえ安定した。

arg2シェルスクリプトから次から始めて、プログラムに引数を渡したいと思います。

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

1つ以上のパラメータがある可能性がありますが、どうすればよいですか?

答え1

一般的なアプローチは、コピーを保存することです。アルギニン1"$1")引数を1ビット移動するので、リスト全体を次のように参照できます"$@"

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

Bashは間違いなくいくつかの配列サポートを提供しますが、質問ではこれを要求しません。

もしアルギニン1オプションなので、次のように確認できます。

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

答え2

パラメータ拡張を使用して、位置パラメータを分割できます。構文は次のとおりです。

${parameter:offset:length}

省略すると、length最後の値が考慮されます。

2番目のパラメーターから最後のパラメーターに渡すには、次のものが必要です。

${@:2}

例:

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

$ foo bar spam egg
spam egg

関連情報