展开字符串的ENV变量,运行命令并存储在变量中?

时间:2016-01-07 19:15:02

标签: bash shell

如何扩展变量,运行该命令并将输出存储到变量?

通常你这样做

var="$(echo string)"

但我想要这个

envString='echo $stringToEcho'
stringToEcho="hello world"
var="$(${envString})"` 

但里面的美元符号并没有扩大。我需要运行存储在变量中的命令并将输出存储到另一个变量。

1 个答案:

答案 0 :(得分:2)

如果您的字符串包含写为eval的内容 - 安全:

envString="echo string"
var=$(eval "$envString")

...即使包含变量引用也会有效,如果引用正确:

envString='echo "$someVar"'  # use single-quotes here to avoid premature expansion!
someVar='hello world'
var=$(eval "$envString")

但是,如果您的字符串包含通过扩展变量而不使用printf %q来安全地转义所包含的任何变量而生成的内容,不执行此操作

参考文献:

  • BashFAQ #50(“我正在尝试将命令放在变量中,但复杂的情况总是失败!”)
  • BashFAQ #48(“评估命令和安全问题”)。