7

谁能告诉我这里最大的区别是什么以及为什么后者不起作用?

test="ls -l"

现在两者都可以正常工作:

eval $test
echo `$test`

但在这种情况下:

test="ls -l >> test.log"

eval $test
echo `$test`

后者将不起作用。这是为什么?我知道 eval 只是执行一个脚本,而撇号正在执行它并将结果作为字符串返回。是什么导致无法>>在命令中使用或类似的东西来执行?也许有没有办法让它与撇号一起工作而我做错了什么?

4

2 回答 2

6

当您使用反引号执行命令时,发送到 shell 的命令是:

ls -l '>>' test.log

这使得两者都成为>>test.log论据ls(注意周围的引号>>)。

使用eval时,正在执行的命令是:

ls -l >> test.log

bash -vx scriptname(通过说看看发生了什么来执行你的脚本。)

于 2013-09-17T12:35:11.050 回答
0

eval 是“表达式值”,即

test="ls -l >> test.log"
eval $test

在终端中以相同的方式执行

ls -l >> test.log

无论

echo 仅用于显示目的。

于 2013-09-17T12:24:08.537 回答