bar
我模拟了变量的值为的情况$foo
。foo
也是一个变量,其值为hello
。
$ foo=hello
$ bar=$(echo "\$foo")
$ echo $bar
$foo
hello
我该如何到达给定 foo="hello"
和bar="$foo"
?
我试过:
$ echo $(echo $bar)
但输出仍然是:
$foo
答案1
使用“nameref”
declare -n bar=foo
foo=hello
echo "$bar" # => hello
foo=world
echo "$bar" # => world
或者间接变量
unset bar
bar=foo
foo=hello
echo "${!bar}" # => hello
foo=world
echo "${!bar}" # => world
答案2
使用eval
方式如下:
$ foo=hello
$ bar=$(echo "\$foo")
$ echo "$bar"
$foo
$ eval echo "$bar"
hello
$ foo=world
$ eval echo "$bar"
world
在上面的例子中,eval
bash 内置命令将再次解析参数,以便$bar
变量内容将再次被解释为变量($foo
)及其当前内容(hello
在第一种情况下和world
在第二种情况下)将用作echo
命令的参数。