Linux
為什麼 m4 -D 選項不做替換
-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!
當
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
此說明。簡而言之,如果前兩個參數相等,則整個指令將被第三個參數替換,這就是您在執行初始命令時看到的:第一個(從 的值擴展)等於第二個,所以被擴展。如果您定義為另一個字元串,該指令將被第 4 個參數替換,但正因為您的文件中沒有任何第 4 個參數,它將被任何內容替換(即刪除)。yes``QUOTE``yes``Learn Linux today!``QUOTE``ifelse