庆典/ KSH /脚本的eval子shell报价 [英] bash/ksh/scripting eval subshell quotes

查看:161
本文介绍了庆典/ KSH /脚本的eval子shell报价的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  [根] $ CMD =LS -ltr
[根] $ EVALW = $($ CMD)
[根] $ KSH:LS -ltr:未找到。
[根] $回声$ W

但是,这工作得很好:

  [根] $ CMD =LS -ltr
[根] $ EVAL'W = $('$ CMD')'
[根] $回声$ W


解决方案

您需要躲避 $(...)用反斜线prevent它从由外壳被评估。在 $(...)需求是pserved $ P $的是,直到它被传递到评估

  CMD $ =LS -ltr
$ EVALW = \\ $($ CMD)
$回声$ W
共有197092 srwxr-XR-X 1根根...

I'm using ksh and having some trouble. Why does this code not run?

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

But this works fine:

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

解决方案

You need to escape the $(...) with a backslash to prevent it from being evaluated by the outside shell. The $(...) needs be preserved as is until it is handed off to the eval:

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

这篇关于庆典/ KSH /脚本的eval子shell报价的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆