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结果始终是正确的.

这使得脚本比较通用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值