に別の変数名と変数の値を使用する、の名前が別の変数の値から来ている、と私は次のコードを書いた:どのように変数を宣言したいのbash
a="bbb"
$a="ccc"
をしかしそれはうまくいかなかった。この仕事をする正しい方法は何ですか?
に別の変数名と変数の値を使用する、の名前が別の変数の値から来ている、と私は次のコードを書いた:どのように変数を宣言したいのbash
a="bbb"
$a="ccc"
をしかしそれはうまくいかなかった。この仕事をする正しい方法は何ですか?
あなたがそうのような他の変数から値を使用して、単純な割り当てを使用して変数に値を割り当てることができます。
#!/usr/bin/bash
#variable one
a="one"
echo "Variable a is $a"
#variable two with a's variable
b="$a"
echo "Variable b is $b"
#change a
a="two"
echo "Variable a is $a"
echo "Variable b is $b"
その出力は以下です:
Variable a is one
Variable b is one
Variable a is two
Variable b is one
だからにしてくださいこれをb = "$ a"のように割り当てて、あなたはすばらしいはずです。
eval
がこれに使用されていますが、あなたがそれを素直に行うと、厄介なエスケープ問題が発生します。この種のものは、一般的に安全である:
name_of_variable=abc
eval $name_of_variable="simpleword" # abc set to simpleword
これは壊れる:
eval $name_of_variable="word splitting occurs"
修正:
eval $name_of_variable="\"word splitting occurs\"" # not anymore
究極の修正:あなたが変数に割り当てたいテキストを配置します。それをsafevariable
としましょう。次に、これを行うことができます:
eval $name_of_variable=\$safevariable # note escaped dollar sign
すべてのエスケープ問題を解決します。
eval 'abc=$safevariable' # dollar sign now comes to life inside eval!
そしてもちろん、この割り当てはすべてのものに免疫がある:ドル記号は、これを効果的に実行しますeval
機能、にそのまま生き残っています。これは、のために働くかもしれない
:safevariable
は(ない特別な何か。注意すべき点は、我々はname_of_variable
を想定していることであることは、有効な変数名しか含まれていない、と私たちは自由に使用できます1)*
、スペース、$
、などを含めることができますあなた:
foo=bar
declare $foo=baz
echo $bar
baz
かこれは:あなたがそれを設定するのではなく、変数の値を取得したい場合は
foo=bar
read $foo <<<"baz"
echo $bar
baz
正しい、より良い宣言を使用する(セキュリティ上の理由) –
@ meso_2600宣言は、変数のスコープをローカル変数に変更するため、代入と同じように動作しません(変数を変更することはできませんあなたがグローバル変数として宣言しない限り、宣言を伴う親スコープから)。 – niieani
あなたの2番目の答えは素晴らしいです。サブシェルは生成されません。乾杯。 –
あなたはこの
を行うことができますvar_name1="var_name2"
var_name2=value_you_want
eval temp_var=\$$var_name1
echo "$temp_var"
ここでは、indirect referencesについて読むことができます。
あなたはこのようdeclare
と!
、使用することができます。
John="nice guy"
programmer=John
echo ${!programmer} # echos nice guy
第二の例:
programmer=Ines
declare $programmer="nice gal"
echo $Ines # echos nice gal
こんにちはFlimm。配列で可能ですか? 'echo '$ {!array [1]}' 'のようなもの? – leaf
質問は今の表現に固定変数を割り当てる方法をどのように間接的に計算された変数名の際に、あるが。 – Kaz