2011-01-28 26 views
62

Bashスクリプトでコマンドライン引数を変更する方法はありますか?たとえば、Bashスクリプトは次のように呼び出されます。Bashでコマンドライン引数を変更する

./foo arg1 arg2 

スクリプト内のarg1の値を変更する方法はありますか?あなたのようなものを言う

$1="chintz" 

答えて

95

すべての引数をリセットする必要があります。例: $3

$ set -- "${@:1:2}" "new" "${@:4}" 

基本的に変更したい1(S)を除いて、現在の値にsetすべて引数。

"${@:1:2}" notationオフセット1から出発して(したがって表記2)は、2つの位置の引数(すなわち$1)に拡張されます。この場合は"$1" "$2"の省略形ですが、たとえば、 "${17}"

+1

$ 3を変更するには、$ 1と$ 2も変更する必要がありますか?そしてそれらを何に変更しますか? 「リセット」とはどういう意味ですか? – Sriram

+2

もちろん '$ 1'と' $ 2'に。 –

+0

+1:それはとても素敵です! – Johnsyweb

17

あなたは場合に、そのままスクリプトに入力を残して、(私は、input_filename = $1output_filename = $2か何かを知らない)より意味のある変数に$1$2を割り当て、その後、それらの変数(input_filename = 'chintz')のいずれかを上書きするほうが良いでしょうそれは他の場所で必要です。

+0

私は、入力引数そのものを変更できるアプローチが必要でした。私はスクリプトから価値を返すことを望んでいたので、それを行う必要がありました。 thkalaによって提案された答えはうまくいった。応答ありがとう! @Johnsywebは合意した。 – Sriram

+3

読みやすくするために、あなたの方が良い方法です。 – Dss

関連する問題