使用 eval 将 Bash 输出存储到变量中

29

我有一行代码

eval echo \$$var

如何将字符串打印到一个变量中?

4个回答

38

像这样:

eval c=\$$var

更好、更安全的方式是使用间接引用:

c=${!var}

谢谢!我已经苦苦挣扎了几个小时,试图在 Bourne Shell 中使用变量变量。后面的选项在很多地方都有列出,但只适用于 bash,而前者也适用于 sh - DanielM
7
无法正常工作:后者的替换出现错误。Bash 4.4.23版本。 - bliako
1
我认为是变量的值导致了错误的替换。请尝试使用有效的名称。 - perreal

27
newVariable=$(eval echo \$$var)

这似乎有效,但结果是值的第一个字符是美元符号?我尝试了 $var,但是我的字符串中的变量不再扩展。有什么想法吗? - David Doria
1
“\”是转义字符,如果你在“$”之前放置它,你肯定会得到它。尝试“$var”。或者使用上面文章中的第二个示例。 - hashier
2
在我的情况下,我执行了以下操作:newVariable=$(eval $var),并且成功了! - robe007

4
你可以尝试这个:在bash上对我有效。
c=$(eval echo \${$var})

例子: 如果HOME是环境变量,包含你的主目录,例如/export/users/john,那么在一个变量内嵌套另一个变量,然后解包该组合将像这样运行:

var=HOME
c=$(eval echo \${$var})
echo $c
/export/users/john

虽然这看起来可能有些复杂,但在某些情况下将会非常有用。


3
这可以通过使用反引号语法实现:` `
c=`$var`

2
这里缺少第二个引号。 - ricab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接