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 显示出所有执行的命令。这对调试来说是非常方便的。