12.1.5. shell 命令行的处理顺序

shell 大致以下列的顺序来处理一个脚本。

  • shell 读取一行。

  • 如果该行包含有"…"'…',shell 对该行各部分进行分组作为 一个标识(one token) (译注:one token 是指 shell 识别的一个结构单元).

  • shell 通过下列方式将行中的其它部分分隔进 标识(tokens)

    • 空白字符:<空格> <tab> <换行符>

    • 元字符:< > | ; & ( )

  • shell 会检查每一个不位于 "…"'...' 的 token 中的 保留字 来调整它的行为。

    • 保留字if then elif else fi for in while unless do done case esac
  • shell 展开不位于 "…"'...' 中的 别名

  • shell 展开不位于 "…"'...' 中的 波浪线

    • ~“ → 当前用户的家目录

    • ~<user>“ → <user> 的家目录

  • shell 将不位于 '...' 中的 变量 展开为它的值。

    • 变量:”$PARAMETER“ 或 “${PARAMETER}
  • shell 展开不位于 '...' 中的 命令替换

    • $( command )“ → “command“ 的输出

    • ` command ` “ → “command“ 的输出

  • shell 将不位于 "…"'...' 中的 glob 路径 展开为匹配的文件名。

    • * → 任何字符

    • ? → 一个字符

    • […] → 任何位于 ““ 中的字符

  • shell 从下列几方面查找 命令 并执行。

    • 函数 定义

    • 内建命令

    • $PATH” 中的可执行文件

  • shell 前往下一行,并按照这个顺序从头再次进行处理。

双引号中的单引号是没有效果的。

在 shell 中执行 “set -x” 或使用 “-x” 选项启动 shell 可以让 shell 显示出所有执行的命令。这对调试来说是非常方便的。