POSIX shell 中赋值的词法分析

POSIX shell 中赋值的词法分析

对于 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 节的规定进行。

  1. “第一个词” 是什么意思?

    “当第一个词时”是什么情况?

    什么情况下是“不是第一个词”?

  2. '当第一个单词','如果TOKEN不包含字符'=''会是什么情况?
  3. 当“不是第一个词”时,

    • “如果以‘=’开头”是什么情况?

    • 什么情况是“否则”?

答案1

  1. “第一个词” 是什么意思?

第一个不是操作数的标记。

“当第一个词时”是什么情况?

当分析第一个不是操作数的标记时。

什么情况下是“不是第一个词”?

这种情况用于允许处理同一行中存在的多个分配。

  1. '当第一个单词'时,'如果TOKEN不包含字符'=''是什么情况?

当第一个不是操作数的标记不包含符号时=​​,这不是赋值,因此它将被作为命令名称处理(规则 1)。

  1. 当“不是第一个词”时,

    • “如果以‘=’开头”是什么情况?

那会是这样的:

=123
  • 什么情况是“否则”?

有两个“否则”,第一个是这样的:

invalid%variable+name=123

第二个“否则”涵盖了非第一个单词不包含赋值的情况。

相关内容