簡単な GNU m4 の質問ですが、正しい答えが見つかりません。コードセクションを開始/終了するマークダウンヘッダーを出力したい:
```
echo Hello
```
3 つのバッククォートを含む GNU M4 マクロを作成するにはどうすればよいですか? 何かのようなもの
define(`md_code',````')
md_code
echo Hello
md_code
M4 メーリング リストで Eric Blake から回答を得ました: http://lists.gnu.org/archive/html/m4-discuss/2015-04/msg00004.html
changequote はあなたの友達です。これはそれを行います:
define(`md_code', changequote([,
])[changequote([,])```changequote(`,')]changequote(`,'))
引用符を 2 回変更する必要があります。1 回目はマクロ定義の周りで、定義自体が (バッククォート) を不均衡な方法で使用することを意図しているためです。マクロ展開では、展開が不均衡な方法でバックティックを出力するためです。変更された引用ごとに、元の引用を復元する必要があります。これは、m4 の実行中、デフォルトのクォートが (backticks) ' のままであると想定しています。
あなたの場合は、前もって changequote を使用することをお勧めしますが、デフォルト(バッククォート)の引用ルールではなく、これらの引用ルールの下で入力をグローバルに記述します。autoconf が [ ] を引用文字として意図的に使用したことを思い出してください。これは、(バッククォート) と ' がシェル スクリプトでバランスの取れたペアで発生しないのとは対照的に、出力でバランスが取れている可能性が高いためです。実際、2 バイトまたは 3 バイトの引用符文字列を選択すると、さらにあいまいさがなくなりますが、より多くの入力が必要になります。