如何強制m4繼續處理行如果值有散列?m4停止處理,如果新值包含散列(#)
$ echo a a a | m4 -D a=B+
B+ B+ B+
$ echo a a a | m4 -D a=B#
B# a a
我想對第二種情況相同的行爲 - 是否有可能? (全部三次被替換)。
在我的理解中觀察到的行爲是不一致的,我在用戶手冊中找不到解釋。
如何強制m4繼續處理行如果值有散列?m4停止處理,如果新值包含散列(#)
$ echo a a a | m4 -D a=B+
B+ B+ B+
$ echo a a a | m4 -D a=B#
B# a a
我想對第二種情況相同的行爲 - 是否有可能? (全部三次被替換)。
在我的理解中觀察到的行爲是不一致的,我在用戶手冊中找不到解釋。
#
字符是註釋的第一個字符,換行符是最後一個字符。 m4
解析第一個a
並將其替換爲B#
。它不會掃描更多,因爲它會發表評論。
的解決方案是與changecom
改變註釋字符:
$ echo "changecom(BC,EC)a a a" | m4 -D a=B#
B# B# B#
當然,你可以選擇更好的評論開始時間和結束序列。
Ps。您可以通過簡單的changecom
關閉評論,無需參數:echo changecom a a a
。您可以從手冊中閱讀:)
非常感謝。我現在解決了這個問題,但它看起來仍然不一致。如果價值(我從第三方獲取)將包含另一個changecom()?到目前爲止,我正在'堆棧溢出':echo「changecom(BC,EC)a a」| m4 -D'a = B#changecom(a)'。儘管我會接受答案,但我仍然不明白當前的方法以及如何處理它。 – noonex
我認爲概念上的評論必須在處理之前剝離出來,但無論如何它看起來存在邊界案例問題,並且該工具可能對變通解決方案有用 – noonex
這不是不一致的行爲,它有很好的記錄。 'm4'解析其輸入並搜索已知關鍵字(和宏)並將其「替換」爲其定義。如果你想包含一個文件並且不想分析,你可以使用'paste'。或者如果它有幫助,你可以使用'-P'選項來'm4'。或者...如果你想使用一個工具,你應該知道它:) – uzsolt
m4不是標籤系統。該字符被稱爲「散列」。 – melpomene