shell执行指令前,Bash会先对改道指令进行分析。以下是Bash分析指令的流程
分割管道 : 如果已使用管道,则以管道为分隔符,将指令切成各别的指令。例如:命令1 | 命令2 | 命令3,会分成3个命令
对各别命令进行以下分析
取出token:使用分隔符,如空白 Tab,将命令分成token,所谓token是指组成命令的单词,例如 ll -la test.txt 可拆成ll -la 及 test.txt 3个token
替换别名 : 检查命令的第一个token 是不思别名,若是别名,则把别名替换成真正的指令,例如 把ll 替换成 ls -l --color=auto
括号扩展 : 若token有括号扩展的语法,则进行展开。 如{sb,b}in 会展开成sbin bin
~符号扩展 : 若token中有家目录的符号,则替换成实际的路径。如~ols3替换成/home/ols3
替换变量 : 若token中含有变量,则以变量取代。如$HI 换成‘hi’
替换命令 : 若token中含有 $(命令) 的形式,则把它替换成实际的执行结果。如 $(which diff) 替换成 /usr/bin/diff
替换算术 : 若有算术式,则计算其结果,并进行替换。 如$((3+5)) 替换成 8
替换通配符 : 若token中含有 * 或 ? 的通配符,则替换其对应的结果。如 *.sh 替换成test.sh
根据函数 内置命令 搜寻路径的顺序,找寻第一个token所代表的命令位于何处
执行已替换完成的指令