-DQUOTE=yes
下面的代码是如何工作的?
我预计第二行是ifelse(yes,yes,Learn Linux today!)
其他部分对我来说很有意义。
从Linux 袖珍指南 - Daniel J. Barrett
$ cat myfile
My name is NAME and I am AGE years old.
ifelse(QUOTE,yes,Learn Linux today!)
$ m4 -DNAME=Sandy -DAGE=25 -DQUOTE=yes myfile
My name is Sandy and I am 25 years old.
Learn Linux today!
答案1
m4
当许多内置处理宏出现在输入中时,处理器会识别它们的名称,并且是ifelse
其中之一。
通常m4
与其-P
选项一起使用以避免意外处理这些指令。使用-P
要求您将字符串添加m4_
到您想要实际处理的所有内置指令名称的前面,例如m4_define
、m4_ifelse
、m4_dnl
等。
这可以避免输入中宏指令的大多数意外执行,因为没有前缀的指令m4_
不会被视为文本。
$ cat file
My name is NAME and I am AGE years old.
ifelse(QUOTE,yes,Learn Linux today!)
$ m4 -P -DNAME=Sandy -DAGE=25 -DQUOTE=yes file
My name is Sandy and I am 25 years old.
ifelse(yes,yes,Learn Linux today!)
没有-P
,则作为多分支- -指令ifelse
处理。这条指令是m4
if
then
else
记录在这里。简而言之,如果前两个参数相等,则整个指令将被第三个参数替换,这就是您运行初始命令时所看到的:第一个yes
(从 的值扩展QUOTE
)等于第二个yes
,因此Learn Linux today!
被扩展。如果您定义QUOTE
为另一个字符串,则该ifelse
指令将被第四个参数替换,但由于文档中没有任何第四个参数,它将被替换为任何内容(即删除)。