对于 POSIX shell 中的词法分析,来自 http://pubs.opengroup.org/onlinepubs/007904875/utilities/xcu_chap02.html
7. [在命令名称前面赋值]
A。 [当第一个词出现时]
如果 TOKEN 不包含字符“=”,则应用规则 1。否则,应适用 7b。
b. [不是第一个词]
如果 TOKEN 包含字符:
— 如果以“=”开头,则应返回标记 WORD。
— 如果“=”前面的所有字符形成有效名称(请参阅 XBD 第 3.231 节),则应返回标记 ASSIGNMENT_WORD。 (引用的字符不能参与形成有效的名称。)
— 否则,未指定返回的是 ASSIGNMENT_WORD 还是 WORD。名称的分配应按照第 2.9.1 节的规定进行。
“第一个词” 是什么意思?
“当第一个词时”是什么情况?
什么情况下是“不是第一个词”?
- '当第一个单词','如果TOKEN不包含字符'=''会是什么情况?
当“不是第一个词”时,
“如果以‘=’开头”是什么情况?
什么情况是“否则”?
答案1
- “第一个词” 是什么意思?
第一个不是操作数的标记。
“当第一个词时”是什么情况?
当分析第一个不是操作数的标记时。
什么情况下是“不是第一个词”?
这种情况用于允许处理同一行中存在的多个分配。
- '当第一个单词'时,'如果TOKEN不包含字符'=''是什么情况?
当第一个不是操作数的标记不包含符号时=
,这不是赋值,因此它将被作为命令名称处理(规则 1)。
当“不是第一个词”时,
- “如果以‘=’开头”是什么情况?
那会是这样的:
=123
- 什么情况是“否则”?
有两个“否则”,第一个是这样的:
invalid%variable+name=123
第二个“否则”涵盖了非第一个单词不包含赋值的情况。