スクリプトの引数の値を変更するにはどうすればよいですか?


11

次の簡単なスクリプトを試してみました。

#!/bin/bash
$1="bar"
echo $1

しかし、実行する./script fooとエラーが発生し、値は変更されません。

/home/mika/script: line 2: foo=bar: command not found
foo

$ 1はスクリプトに渡す最初の引数です。しかし、このように私はその値を変更したいと思います。


回答:


10

組み込みを使用できますset

#!/bin/bash
set -- "bar"
echo $1

ソースおよび詳細:コマンドライン引数を変更します-bash


私はそれを試しましたが、それでも「foo」をエコーし​​ました。異なる結果が得られましたか?スクリプトには必ず「foo」を渡してください。
Marty Fried

@MartyFried Ups、すみません...私は私の答えを更新するだけです。
RaduRădeanu14年

うまくいきました。:-)良い答え...私は彼がそれをしたくないと思っていたと思います、そして彼がなぜそうするのかはわかりませんが、あなたの答えは実際には単にそれをしないという私の提案よりも正確です。リンクをありがとう。
Marty Fried

4

これらの変数を直接変更することはできません。あなたは言えた:

x=$1
echo $x

その後、$x代わりに使用できます

を使用$1=barすると、の最初のパラメータがすぐに置き換えられ$1、本質的にが指定されます。"foo=bar"これは、変数「foo」ではなく、コマンド「foo」として解釈されます。


いいアイデアですが、OPが正確に何を達成したいかによって異なります...私からの+1。
RaduRădeanu2014年

2

$1このためにuseを使用しないでください。bash他のシェルで$1は、スクリプトに渡す最初の引数です。

#!/bin/bash
echo $1

上記をとして実行するとfoo.sh hello、それがhello最初の引数なので印刷されます。また、変数をとして参照しvar、変数の内容をとして参照します$var。したがって、期待どおりの動作を得るには、変数に別の名前を使用し、$:は使用しないでください。

#!/bin/bash
var="bar"
echo $var

この小さなスクリプトは、私が何を望んでいるかを人々に理解させるための例にすぎません。$ 1はスクリプトに渡す最初の引数です。しかし、このようにその価値を変えたいと思います。これを別の大きなスクリプトに適用する必要があります。ありがとうございました。
user258266 2014年

@ user258266しないでください。大きなスクリプトを新しい値で呼び出すだけで、$1変更する値には使用しないでください。とにかく、構文エラーを修正する限り、それはうまくいくはずです。主な問題は、を使用していたこと$です。
terdon 2014年

しかし、私は必要です...ここでは理由を説明できません...多分私は私の質問を編集します。
user258266 14年

@ user258266してください。あなたは、として変数を設定しようとしている$foo="bar"あなたが必要と、動作しないこと、foo="bar"なし$
terdon 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.