2015-04-08 18 views
5

Basit bir GNU m4 sorusu, ancak doğru cevabı bulamıyorum. Ben 3 komutu ters tırnak içeren bir GNU M4 makro oluşturmak nasılGNU m4: kaçan backticks (`)

``` 
echo Hello 
``` 

: Bir kod bölümü biten/a markdown başlık başlangıç ​​yazdırmak istiyorum?

define(`md_code',````') 
md_code 
echo Hello 
md_code 

cevap

5

gibi bir şey M4 posta listesinde Eric Blake'den bir cevap var: http://lists.gnu.org/archive/html/m4-discuss/2015-04/msg00004.html

changequote arkadaşın. Bu yapacağım:

define(`md_code', changequote([, 
])[changequote([,])```changequote(`,')]changequote(`,')) 

iki kez tırnak değiştirmek zorunda: Bir kez makro tanımı etrafında, beri tanım kendisi dengesiz bir şekilde (komutu ters tırnak) kullanmak niyetinde; ve yeniden genişleme dengesiz bir şekilde çıktıyacağından, makro genişletmede ; Değiştirilen her alıntı için, orijinal tırnakların geri yüklenmesi olmalıdır. Bu, varsayılan alıntılamanın m4 çalışması boyunca (backticks) ' 'da kaldığını varsayar. senin durumunda rağmen

, başka şeye ön changequote kullanmanızı tavsiye ve küresel yerine kurallarını alıntı varsayılan (backticks) 'ait kurallarını alıntı olanlar altında girişinizi yazardım. autoconf'un, alıntılama karakterleri olarak [] ile olarak gittiğini unutmayın, çünkü (backtick'ler) yerine çıkışta dengeli olmaları ve kabuk komut dosyalarındaki dengeli çiftlerde bulunmaması çok olasıdır. Aslında, , daha fazla yazmayı gerektirse de, 2 veya 3 bayt alıntı dizeleri seçerek daha da belirsizdir.