有谁可以告诉我这里有什么大的区别以及为什么后者不起作用?
test="ls -l"
两者现在都可以正常工作:
eval $test
echo `$test`
但在这种情况下:
test="ls -l >> test.log"
eval $test
echo `$test`
后者不起作用。这是为什么?我知道eval只是在撇号执行时执行脚本并将结果作为字符串返回。什么使得无法在命令中使用>>
或simmilar东西来执行?也许是否有一种方法可以使它与撇号一起工作而我做错了什么?
答案 0 :(得分:3)
当您使用反引号执行命令时,发送到shell的命令是:
ls -l '>>' test.log
使>>
的{{1}}和test.log
参数变为ls
(请注意>>
周围的引号)。
使用eval
时,正在执行的命令是:
ls -l >> test.log
(通过说bash -vx scriptname
来执行您的脚本,看看发生了什么。)
答案 1 :(得分:0)
eval是'表达值',即
test="ls -l >> test.log"
eval $test
在终端中以与
相同的方式执行ls -l >> test.log
是否
echo仅用于显示目的。