8.1.5变更报价单
是邪恶的
尤其是,绕过适当报价的诱惑通常很高深夜的时候。然后,许多经验丰富的Autoconf黑客最终屈服于力量的黑暗面并使用终极武器:变更报价单
.
M4内置变更报价单
属于一组基元允许人们调整语言的语法以适应自己的需要需要。例如,默认情况下,M4使用“`'和'''作为引号,但在shell编程的上下文中(实际上是大多数编程语言),这是最糟糕的选择:因为shell代码中的字符串和后引号表达式(例如‘“这个”'和'`那个`'),并且由于通常的文字字符编程语言(如‘'0''),有许多不平衡‘`'和''’. 正确的M4报价将成为一场噩梦,如果并非不可能。为了使M4在这种情况下有用设计师为其配备了变更报价单
,这使它可以选择另一对引号。M4sugar、M4sh、Autoconf和自动测试都已选择使用“['和']’. 不是特别的因为他们不太可能是角色,但是因为他们是字符不太可能不平衡.
还有其他魔法原语,例如changecom公司
以指定注释是什么句法形式(常见的是‘changecom(<!--,-->)'当使用M4生成HTML页面时),单词
和更改语法
更改其他语法细节(例如表示n个第个参数,'$'由默认值,参数周围的括号等)。
这些基元实际上是为了使M4在特定情况下更有用域:应将其视为命令行选项:--报价,--评论,--单词、和--语法。然而,它们是作为M4内置程序实现的它使M4库成为独立的(无需其他选项)。
这就是问题所在...
问题是,它很容易在M4脚本,而不是其初始化。这个,如果不小心的话经过深思熟虑,可能会导致灾难性后果:您正在更改执行过程中的语言.更改和恢复语法通常是不够的:如果您碰巧在两者之间调用宏,这些宏会丢失,因为当前的语法可能不会实现它们的那个。