我正在编写一个脚本,其中一部分没有按照我的预期运行。 为简单起见,我在一个简单的例子中打破了这一部分
echo 'echo "" > tmp' | while read cmd; do $cmd ; done
在这里,我希望完整的命令,“echo”“> tmp”由$ cmd执行。 但是会发生什么呢
"" > tmp
执行的命令回显“”> tmp literaly。而不是回显“”并将其重定向到文件tmp。 将命令存储在$ cmd中然后尝试执行它时,显然会出现问题。
即使我进一步简化,结果也一样
cmd="echo "" > tmp"
$cmd
> tmp
我试图尝试''和'“的不同用法但尚未解决它。
答案 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" ;