我使用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
我使用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
你需要躲避$(...)
用反斜杠以防止其受到外界外壳被评估。 在$(...)
需要被保留原样,直到它被传递到eval
:
$ CMD="ls -ltr"
$ eval "W=\$( $CMD )"
$ echo $W
total 197092 srwxr-xr-x 1 root root...
KSH正在扩大$CMD
在第一个例子是一个位置参数,其值为“LS -ltr”(注意包含的空间你想它扩大到两个参数:“LS”(命令名)和“-ltr “(即选项)。后来的示例情况下,这是因为膨胀的扩展是在脚本,然后传递到子壳。
如果你正在写一个C程序中,第一实施例给出了您argc = 1
与argv[0] = "ls -ltr"
和第二给你argc = 2
与argv[0] = "ls"
和argv[1] = "-ltr"
(如果这个例子可以帮助任何。)