如何在bash中将变量的值用作另一个变量的名称

时间:2012-03-15 06:24:09

标签: bash

我想声明一个变量,其名称来自另一个变量的值,我编写了以下代码:

a="bbb"
$a="ccc"

但它不起作用。完成这项工作的正确方法是什么?

6 个答案:

答案 0 :(得分:54)

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函数,这将有效地执行此操作:

eval 'abc=$safevariable' # dollar sign now comes to life inside eval!

当然,这项任务对一切都是免疫的。 safevariable可以包含*,空格,$等。(需要注意的是,我们假设name_of_variable只包含有效的变量名称,而我们只有一个可以自由使用:不是特别的东西。)

答案 1 :(得分:40)

您可以使用declare!,如下所示:

John="nice guy"
programmer=John
echo ${!programmer} # echos nice guy

第二个例子:

programmer=Ines
declare $programmer="nice gal"
echo $Ines # echos nice gal

答案 2 :(得分:14)

这可能对您有用:

foo=bar
declare $foo=baz
echo $bar
baz

或者这个:

foo=bar
read $foo <<<"baz"
echo $bar
baz

答案 3 :(得分:9)

您可以使用eval来实现此目的 例如:

$ a="bbb"
$ eval $a="ccc"
$ echo $bbb
ccc

希望这有帮助!

答案 4 :(得分:3)

如果您想获取变量的值而不是设置它,您可以执行此操作

var_name1="var_name2"
var_name2=value_you_want
eval temp_var=\$$var_name1
echo "$temp_var"

您可以在此处阅读indirect references

答案 5 :(得分:-2)

您可以使用来自另一个变量的值使用简单赋值为变量赋值:

#!/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”,你应该很好。