bash:执行存储在变量

时间:2017-06-25 10:27:24

标签: bash

我正在编写一个脚本,其中一部分没有按照我的预期运行。 为简单起见,我在一个简单的例子中打破了这一部分

echo 'echo "" > tmp' | while read cmd; do  $cmd ; done

在这里,我希望完整的命令,“echo”“> tmp”由$ cmd执行。 但是会发生什么呢

"" > tmp

执行的命令回显“”> tmp literaly。而不是回显“”并将其重定向到文件tmp。 将命令存储在$ cmd中然后尝试执行它时,显然会出现问题。

即使我进一步简化,结果也一样

cmd="echo "" > tmp"
$cmd
> tmp

我试图尝试''和'“的不同用法但尚未解决它。

2 个答案:

答案 0 :(得分:1)

使用eval执行存储在变量中的命令:

echo 'echo "" > tmp' | while read cmd; do eval "$cmd" ; done

cmd的值为echo "" > tmp。然后,当Bash将参数替换作为命令解析时,部分"" > tmp将是echo的字符串参数,不被识别为>(重定向)。所以它只输出参数部分。

与:$(echo 'echo "" > tmp')

相同

答案 1 :(得分:0)

更改

do  $cmd ;

do  eval  "$cmd" ;