必须要知道命令解析过程的意义在于:能够清楚的知道命令解析步骤。若发生错误时,能够知道该怎样更改。
比如在博客:I/O重定向(点击打开链接)的举例:例①中,就有因为不知道命令行是如何读取的,而造成while语句块和其后的重定向,对结果的不解。
再比如博客:变量引用(点击打开链接)中第三大点的第3小点,变量举例中就有很多是对命令行的解析过程和如何解析进行的举例分析。如:a=var;b 这一句,是读完a=var;b然后才开始划分一条命令呢,还是先读a=var;再读b呢。还有:a=1 2 3又会怎样解析呢,是读完a=1 2 3,还是只读取:a=1? 读完命令后,这一句应该怎样划分呢?
再比如重定向:>$a (注:$a是变量引用,是一个文件名。这一句即是输出重定向到文件)。这一句的解析,是先重定向>,再$a变量解析呢;还是先$a变量替换,再重定向>呢。很显然这两种是截然不同的。这些都是命令解析过程中的问题。
一、Shell命令行的执行过程,分为15步:
1、读取命令行
2、命令历史替换
3、别名替换
4、花括号扩展
5、波浪号替换
6、I/O重定向
7、变量替换
8、命令替换
9、单词解析
10、 文件名生成
11、引用字符处理
12、进程替换
13、环境处理
14、执行命令
15、跟踪执行过程
二、详细介绍
1、读取命令行
⑴第一步shell会读取完整的命令行
分为两类 (读命令行和读结构语句):
①、读取命令行
Shell会逐个判断读取的每一个字符,直至遇到一个分号“;