首页 > 解决方案 > “Shell 命令语言”文档 - “令牌识别”部分中的反直觉句子

问题描述

在本文档的第 2.3 节(“令牌识别”)中:https ://pubs.opengroup.org/onlinepubs/9699919799.2008edition/utilities/V3_chap02.html 出现以下句子:

“如果指示标记已分隔,并且标记中未包含任何字符,则应继续处理,直到实际标记被分​​隔”

这应该是什么意思?在包含任何字符之前,如何将标记标记为分隔符?

标签: shellshposix

解决方案


这句话确实显得模棱两可。将其改写为“如果令牌为空,则继续处理,直到给出非空令牌为止。”

当一个记号的开始和结束已知时,它被“标记为定界”。所以从最后一个分隔符到新找到的分隔符。

如果有 2 个分隔符彼此相邻,则标记可以为空。

例如,假设分隔符是逗号。

fashl,gasdf,agasdf,aasdf,,ghask

在六个令牌中,第五个令牌是空的。它的开头和结尾由第四个和第五个逗号确定,因此它是“定界的”。但其中没有包含任何字符。


然而,这句话确实继续模棱两可。“处理将继续”没有指定空令牌会发生什么。或者更确切地说,它没有指定应该采取什么逻辑行动或路径。所以它可能意味着:

  1. 如果找到空标记,则继续读取直到下一个分隔符并认为该标记。

  2. 如果找到空令牌,则忽略该令牌并继续阅读。

尽管最终效果可能没有什么不同。


推荐阅读