linux下脚本转命令,linuxshell脚本中怎样将字符串转化为命令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'
然后你在命令⾏内执⾏linux循环执行命令脚本
$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结果始终是正确的.这使得脚本⽐较通⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论