谁能告诉我这里的最大区别是什么,为什么后者不起作用?
test="ls -l"
Run Code Online (Sandbox Code Playgroud)
现在两者都可以正常工作:
eval $test
echo `$test`
Run Code Online (Sandbox Code Playgroud)
但在这种情况下:
test="ls -l >> test.log"
eval $test
echo `$test`
Run Code Online (Sandbox Code Playgroud)
后者将不起作用。这是为什么?我知道 eval 只是执行一个脚本,而撇号正在执行它并将结果作为字符串返回。是什么使得无法>>在命令中使用或类似的东西来执行?也许有没有办法让它与撇号一起工作,而我做错了什么?
当您使用反引号执行命令时,发送到 shell 的命令是:
ls -l '>>' test.log
Run Code Online (Sandbox Code Playgroud)
这使得>>和test.log参数都为ls(注意周围的引号>>)。
使用时eval,正在执行的命令是:
ls -l >> test.log
Run Code Online (Sandbox Code Playgroud)
(通过说bash -vx scriptname来执行你的脚本,看看发生了什么。)
| 归档时间: |
|
| 查看次数: |
4898 次 |
| 最近记录: |