命令行的评价(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 。
阅读(1081) | 评论(0) | 转发(0) |