LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: home_king

【Bash命令行处理】[详解]

[复制链接]
发表于 2005-7-3 16:00:56 | 显示全部楼层
看了楼主的解释,弄清了一些问题,可是还有些问题不太清楚。
就拿下面这个例子来说吧:
$ if [ "foo" = "bar" ]; then echo equals; else echo not equals; fi

上面命令行运行的结果是打印 not equals ,这没问题
可是,我如果先定义
$ A=fi

然后在将第一个命令行改为如下方式:
$ if [ "foo" = "bar" ]; then echo equals; else echo not equals; $A

运行结果是出现>提示符,我输入fi后回程,出现如下结果
> fi
not equals
bash: fi: command not found


能解释一下为什么$A没有被替换为fi 吗?
回复 支持 反对

使用道具 举报

发表于 2005-7-10 11:39:26 | 显示全部楼层
顶````GOOD
回复 支持 反对

使用道具 举报

发表于 2005-8-15 05:12:50 | 显示全部楼层
Post by benu
看了楼主的解释,弄清了一些问题,可是还有些问题不太清楚。
就拿下面这个例子来说吧:

上面命令行运行的结果是打印 not equals ,这没问题
可是,我如果先定义

然后在将第一个命令行改为如下方式:

运行结果是出现>提示符,我输入fi后回程,出现如下结果


能解释一下为什么$A没有被替换为fi 吗?

关键字查找在变量替换之前,所以当shell执行你的命令时,首先是看有没有fi这个关键字。那时还没有做变量替换呢。所以会出现>的错误。当你输入了fi后,命令执行,然后又执行下一个命令$A,而$A替换后是fi,当shell再执行fi时有报错,因为没有fi这个命令。
回复 支持 反对

使用道具 举报

发表于 2005-8-15 06:36:45 | 显示全部楼层
对教主的原帖想做一下讨论。例子:

  1. echo ""\\""
复制代码

这个命令的运行结果是
  1. ""
复制代码
.但在原帖里显示当遇到""的时候,shell只执行6->8步,可是这6到8的步骤中没有一个是对特殊字符进行转义的,都是变量,命令或运算的替换的。所以我认为在6到8的步骤中必须还有一个是检测转义。这样的这个命令就能解试了:echo命令告诉shell对它的参数进行打印操作,shell接到的参数后,对其进行6-8步的检测,同时因为是双引,所以还有进行转义。因为在双引中没有任何的替换,所以运行了转义后shell打进出了结果 。
回复 支持 反对

使用道具 举报

发表于 2005-9-28 08:20:35 | 显示全部楼层
太好了.
回复 支持 反对

使用道具 举报

发表于 2005-12-13 15:59:30 | 显示全部楼层
顶了,好好学习!
回复 支持 反对

使用道具 举报

发表于 2006-1-11 21:34:56 | 显示全部楼层
我看的都晕了……
回复 支持 反对

使用道具 举报

发表于 2006-1-19 12:51:06 | 显示全部楼层
支持34楼的yongjian兄的说法,应将6-8步中转义加上去!
另外,第2步和第3步是不是要倒过来?因为如果按下面说明的那样定义一个关键字别名,比如:alias do=pwd,如果按图中走的话,是会出错的,而如果将检查别名放在第一步,就对了,而且shell的命令处理顺序也是先别名再关键字的.请大家参考.
回复 支持 反对

使用道具 举报

发表于 2006-5-7 11:58:39 | 显示全部楼层
看的有点晕,多少对这个有点了解了
回复 支持 反对

使用道具 举报

发表于 2006-5-22 13:43:12 | 显示全部楼层
关于 //////////// 的问题
在2.6
中,用/来分割目录
使用while循环实现的
类似如下
while(ch=='/')ch=next_char
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表