命令执行顺序
就是指命令执行的优先级,就像四则运算的优先级
bash shell运行命令本来是从左往右依次执行,但期间会遇到种种潜规则
-
把命令查分成单个的命令单词
shell先把拿到手的命令行拆分成一段一段的单词 -
展开别名
突然遇到了一个别名,就去查找alias指向哪里?找到了把对应的内容拿进来摆好
- 展开大括号{}的声明
继续往下看,突然遇到了大括号声明{},里边可能是通配符、代码块之类的鬼东西,计算出结果,摆好
- 展开波浪符的声明 ~
继续往下看,突然又遇到了倒霉的波浪符~,转换为家目录的路径,摆好
- 使用命令替换$()和反向单引号` `
继续往下看,突然又遇到了装着其他命令的$()和反向单引号,把其中的命令先执行了,计算出结果,摆好
- 再次拆分命令行为命令词
再把所有该拆的都拆散,重新摆好
- 展开文件通配符 *,?,[]等
继续往下看,突然又遇到了MMP的的通配符,拿张草纸一顿查,把找到的结果,摆好
- 准备I/O重定向 <,>
以为结束了?怎么可能,最后还遇到倒霉的重定向,
先看看输入重定向送进来什么东西,插到里边摆好,
再看看输出重定向要求送到哪里去,填个快递单先,
后边是不是还有管道,先打个电话和管道那边沟通一下。
- 运行命令
终于的终于,要把所有摆好的东东,通过最强大脑,开整!
脚本中不能使用别名
命令里可以执行,脚本里不能使用别名
需要使用原始的命令
如需要使用别名的功能,需要加参数啊!
防止扩展
转义
- 使用反斜杠转义,只显示本身的含义
单引号 ' '
- ' ' 单引号中的内容,只显示本身的含义
双引号 " "
- " " 双引号中变量$可以被识别,但命令只能作为字符显示