Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35417
  • 博文数量: 8
  • 博客积分: 152
  • 博客等级: 入伍新兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 15:02
文章分类
文章存档

2015年(1)

2011年(7)

分类:

2011-05-17 11:00:11

命令行的评价(evaluation)
下面是C shell 解释命令行的顺序:
1. 历史替换
2. 分裂词(包括特殊字符)
3. 更新历史表
4. 解释单引号(') 和 双引号(")
5. 别名替换
6. 输入和输出的重定向(如 > < 和 |)
7. 变量替换
8. 命令替换
9. 文件名扩展
(Bourne shell 的解释顺序本质上是一样的,除了它不执行历史替换和别名替换之外)

所以
A=B echo $A

的执行过程应该是这样的:
1. 没有历史操作符, 因此不进行历史替换(Bourne shell 不执行这一步)
2. 分裂词,每碰到未加引号的空白字符就会产生一个新“词”。这些词是 A=B、echo、$A。
3. shell 将命令行放到历史列表中。(Bourne shell 不执行这一步)
4. 没有引号需要解释
5. 没有别名需要替换
6. 没有输入或输出重定向需要处理
7. shell注意到变量$A,并把它替换成空
8. shell寻找左单引号,执行左单引号中的任何命令,并且将命令的输出插入到命令行中。在本例中,没有这方面的事需要做。(如果左单引号内有通配符或者变量,那么在shell运行左单引号中的命令之前它们是不会被解释的)
9. shell寻找通配符。本例中没有,不需要处理
10. shell 执行 A=B, 执行 echo 。
阅读(1061) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~