名前と値の両方が別のコマンドの出力から得られるbashシェルスクリプトで変数を宣言する必要があります。bashの `declare`でコマンドの出力から名前と値を取る変数を設定するには?
この質問のために、私は一時ファイルtmp
使用します。
$ cat tmp
var1="hello world"
var2="1"
を...と、以下の私のモックのコマンドのためにそれを使用します。最後に
は、私は、入力から直接取得変数名var1
とvar2
で、それぞれhello world
と1
で変数$var1
と$var2
セットを持っている必要があります。ここで
は、私がこれまでに得たものである:
$ cat tmp|while read line; do declare $line; done
私はcat
を使用する必要はありませんが、これは、入力は、他のコマンドの出力から取られているという事実をシミュレートすることで、知りませんファイルに保存します。
これは機能しません。私が取得:
bash: declare: `world"': not a valid identifier
と
$ echo $var1; echo $var2
$
私はこれを行うことができますので、これが動作しない理由を私は理解していない:
declare var1="hello world"
を期待される結果と...。私はこれが同等であると仮定しましたが、私は明らかに間違っています。
私はthis answerを私の問題に最も近いものとして見つけましたが、それはソースファイルに依存しているからです。私はそれを避けたいと思います。私はeval
を使用して他の答えを見つけましたが、私もそれを避けることを好むでしょう。
多分私は理解していない引用符の使用に微妙なことがあります。
唯一の方法は、一時ファイルを使用してソースを作成することですが、それは私がやることですが、別の方法が必要だと思います。
OPが(サブシェルで実行している)スクリプトを実行する場合、これはまだ解決しません – Inian
OK、それはサブシェルでは機能しません。 @Inian。 – zhenguoli
@zhenguoliこれは、1)外部ファイルに依然として依存している、2)変数の値に "="記号がある場合は動作しないので、これは疑問に答えるのが怖いです。 – Jordan