linux 下 脚本转命令,linux shell 脚本中怎样将字符串转化为命令

zdl_361 于 2010-08-21 15:23:29发表:

[i=s] 本帖最后由 zdl_361 于 2010-8-22 23:17 编辑 [/i]

由于bash shell按照以下顺序分析命令行字符串:

1 $()输出展开

2 变量替换

3 然后参数分割

最后执行命令,传递参数所以

如果变量

CM='ls -a'

然后你在命令行内执行

$CM

shell分4步解释

第0 没有$()命令,无操作.

第一 变量展开成字符串"ls -a -l"

第二 按照空白分割成三个部分 ls 和 -a 和-l

第三 以第一个部分为命令名开始调用命令(也就是ls), 并且把-a作为命令的第一个参数传入 -l作为命令第二个参数传入

shell调用命令的过程其实就是在PATH里面搜索程序名称。第一个找到就执行,其他目录就忽略。

当然新的bash内部有hash功能,将程序的绝对地址记录在一张表里面。

以上方式在zsh中会失败。因为zsh按照以下顺序执行

1 $()输出展开

2 然后参数分割

3 变量替换

最后执行命令,传递参数所以

可以做如下实验。

bash:

$ CM='echo hello'

$ $CM

hello

zsh:

$ CM='echo hello'

$ $CM

zsh: command not found: 'echo hello'

$ #也就是说zsh在PATH目录里面搜索名为'echo hello'的命令,但其实你是想让它搜索echo.,参数分析过程和通常见到的不一样。

-----------

使用eval结果始终是正确的.

这使得脚本比较通用。

你可能感兴趣的:(linux,下,脚本转命令)