我正在使用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 发布于 2010-05-04 03:56:37
您需要使用反斜杠对$(...)进行转义,以防止外部shell对其求值。在移交给eval之前,需要按原样保留$(...)
$ CMD="ls -ltr"
$ eval "W=\$( $CMD )"
$ echo $W
total 197092 srwxr-xr-x 1 root root...发布于 2010-05-04 03:52:16
ksh将第一个示例中的$CMD扩展为一个位置参数,其值为"ls -ltr“(注意,其中包含了空格。您希望将其展开为两个参数:"ls“(命令名)和"-ltr”(选项)。后面的示例使用这种扩展,因为扩展在脚本中,然后传递给子shell。
如果您正在编写一个C程序,第一个示例给出了带有argv[0] = "ls -ltr"的argc = 1,第二个示例给出了带有argv[0] = "ls"和argv[1] = "-ltr"的argc = 2。(如果这个例子有用的话。)
https://stackoverflow.com/questions/2760744
复制相似问题