Shell脚本编程基础之shell脚本命令执行顺序

命令执行顺序

就是指命令执行的优先级,就像四则运算的优先级

bash shell运行命令本来是从左往右依次执行,但期间会遇到种种潜规则

  • 把命令查分成单个的命令单词
    shell先把拿到手的命令行拆分成一段一段的单词

  • 展开别名

突然遇到了一个别名,就去查找alias指向哪里?找到了把对应的内容拿进来摆好

  • 展开大括号{}的声明

继续往下看,突然遇到了大括号声明{},里边可能是通配符、代码块之类的鬼东西,计算出结果,摆好

  • 展开波浪符的声明 ~

继续往下看,突然又遇到了倒霉的波浪符~,转换为家目录的路径,摆好

  • 使用命令替换$()和反向单引号` `

继续往下看,突然又遇到了装着其他命令的$()和反向单引号,把其中的命令先执行了,计算出结果,摆好

  • 再次拆分命令行为命令词

再把所有该拆的都拆散,重新摆好

  • 展开文件通配符 *,?,[]等

继续往下看,突然又遇到了MMP的的通配符,拿张草纸一顿查,把找到的结果,摆好

  • 准备I/O重定向 <,>

以为结束了?怎么可能,最后还遇到倒霉的重定向,

先看看输入重定向送进来什么东西,插到里边摆好,

再看看输出重定向要求送到哪里去,填个快递单先,

后边是不是还有管道,先打个电话和管道那边沟通一下。

  • 运行命令

终于的终于,要把所有摆好的东东,通过最强大脑,开整!

脚本中不能使用别名

命令里可以执行,脚本里不能使用别名

需要使用原始的命令

如需要使用别名的功能,需要加参数啊!

防止扩展

转义

  • 使用反斜杠转义,只显示本身的含义

单引号 ' '

  • ' ' 单引号中的内容,只显示本身的含义

双引号 " "

  • " " 双引号中变量$可以被识别,但命令只能作为字符显示
* * * 胖并快乐着的死肥宅 * * *
原文地址:https://www.cnblogs.com/bpzblog/p/14522780.html