【发布时间】:2018-07-20 04:04:34
【问题描述】:
如何分配一个变量,其名称存储在 bash 中的另一个变量中?类似的东西(示例不起作用):
foo=1
a='foo'
$a=42 # This does not work:"bash: foo=42: command not found"
# Want foo == 42 here
【问题讨论】:
如何分配一个变量,其名称存储在 bash 中的另一个变量中?类似的东西(示例不起作用):
foo=1
a='foo'
$a=42 # This does not work:"bash: foo=42: command not found"
# Want foo == 42 here
【问题讨论】:
您可以使用eval。例如:
var1=abc
eval $var1="value1" # abc set to value1
【讨论】:
使用declare 指令:
declare -- $a=42
查看foo的内容:
declare -p foo
declare -- foo="42"
echo "$foo"
42
【讨论】:
你想要:
eval "$a=42"
例如:
$ a=foo
$ eval "$a=42"
$ echo $foo
42
【讨论】:
eval 是危险的。如果是a='date; foo',那么它将在将42 分配给foo 之前执行date 命令。现在想象一下如果date 被一些rm 命令替换。
eval 很危险——你必须能够相信a 的来源(除其他外);如果保证来自您自己的脚本,这可能没问题。不幸的是,declare 并非在所有 shell 中都可用,尽管问题是关于 bash 所以它可以在这里使用。