8.1.5变更报价单是邪恶的

尤其是,绕过适当报价的诱惑通常很高深夜的时候。然后,许多经验丰富的Autoconf黑客最终屈服于力量的黑暗面并使用终极武器:变更报价单.

M4内置变更报价单属于一组基元允许人们调整语言的语法以适应自己的需要需要。例如,默认情况下,M4使用“`'和'''作为引号,但在shell编程的上下文中(实际上是大多数编程语言),这是最糟糕的选择:因为shell代码中的字符串和后引号表达式(例如“这个”'和'`那个`'),并且由于通常的文字字符编程语言(如‘'0''),有许多不平衡`'和''’. 正确的M4报价将成为一场噩梦,如果并非不可能。为了使M4在这种情况下有用设计师为其配备了变更报价单,这使它可以选择另一对引号。M4sugar、M4sh、Autoconf和自动测试都已选择使用“['和']’. 不是特别的因为他们不太可能是角色,但是因为他们是字符不太可能不平衡.

还有其他魔法原语,例如changecom公司以指定注释是什么句法形式(常见的是changecom(<!--,-->)'当使用M4生成HTML页面时),单词更改语法更改其他语法细节(例如表示n个第个参数,'$'由默认值,参数周围的括号等)。

这些基元实际上是为了使M4在特定情况下更有用域:应将其视为命令行选项:--报价,--评论,--单词、和--语法。然而,它们是作为M4内置程序实现的它使M4库成为独立的(无需其他选项)。

这就是问题所在...


问题是,它很容易在M4脚本,而不是其初始化。这个,如果不小心的话经过深思熟虑,可能会导致灾难性后果:您正在更改执行过程中的语言.更改和恢复语法通常是不够的:如果您碰巧在两者之间调用宏,这些宏会丢失,因为当前的语法可能不会实现它们的那个。