庆典/ KSH /脚本的eval子shell报价(bash/ksh/scripting eval s

2019-09-28 17:44发布

我使用KSH并遇到了一些麻烦。 为什么这个代码不跑?

[root]$ CMD="ls -ltr"
[root]$ eval "W=$( $CMD )"
[root]$ ksh: ls -ltr:  not found.
[root]$ echo $W 

但是,这工作得很好:

[root]$ CMD="ls -ltr"
[root]$ eval 'W=$('$CMD')'
[root]$ echo $W 

Answer 1:

你需要躲避$(...)用反斜杠以防止其受到外界外壳被评估。 在$(...)需要被保留原样,直到它被传递到eval

$ CMD="ls -ltr"
$ eval "W=\$( $CMD )"
$ echo $W
total 197092 srwxr-xr-x 1 root root...


Answer 2:

KSH正在扩大$CMD在第一个例子是一个位置参数,其值为“LS -ltr”(注意包含的空间你想它扩大到两个参数:“LS”(命令名)和“-ltr “(即选项)。后来的示例情况下,这是因为膨胀的扩展是在脚本,然后传递到子壳。

如果你正在写一个C程序中,第一实施例给出了您argc = 1argv[0] = "ls -ltr"和第二给你argc = 2argv[0] = "ls"argv[1] = "-ltr" (如果这个例子可以帮助任何。)



文章来源: bash/ksh/scripting eval subshell quotes