changequote
の弊害特に夜も遅くなると,適切な引用符をバイパスする誘惑が大きくなることも多い
ものです.そして,経験豊富なAutoconfのハッカーの多くは,最終的に暗黒の力
に支配され,最終兵器を持ち出します.それはchangequote
です.
M4組み込みのchangequote
は,言語の構文を必要に応じて調整することを
可能にするプリミティブの組に属しています.例えば,M4では引用符としてデフォ
ルトで‘`’と‘'’を使用しますが,シェルプログラムの文脈(そして,
ほとんどの実際のプログラミング言語)では,それは利用可能なものの中での最
悪の選択です.シェルコードでの(‘'this'’と‘`that`’ のような)文
字列とバッククオートされた式と,通常のプログラミング言語で使用される
(‘'0'’のような)リテラル文字のため,多くの対にならない‘`’と
‘'’が存在します.そのような文脈での厳密なM4の引用符が(変更)不可能な
場合は,悪夢になります.そのような文脈でM4を役立たせるため,それを設計し
た人は別の引用符の組の選択を可能にするchangequote
を装備しました.
M4sugar,M4sh,Autoconf,そしてAutotestでは,すべてのものが‘[’と
‘]’の使用を選択しています.それらが滅多に使用されない文字という理由
だけでなく,対にならないことも滅多に無い文字という理由もあります.
構文形式がコメントだということを指定するため(M4がHTMLページを生成するた
めに使用されるとき,‘changecom(<!--, -->)’が一般的だと分かるでしょ
う)のchangecom
と,それ以外の構文の詳細を変更するための
changeword
とchangesyntax
(n番目の引数を示す,デフォルトで
‘$’となっている文字や,引数の周りを囲むカッコなど)のような,それ以
外のマジックプリミティブもあります.
これらのプリミティブは,特定の分野に対してM4がより役に立つようにするため,
本当に意味があるものです.それらはコマンドラインオプションのように考える
べきです.それらは,--quotes,--comments,
--words,そして--syntax
のようなものです.それにもかかわ
らず,M4ライブラリ自身が含まれる(追加のオプションが必要無い)ように,M4の
組み込みとして実装されています.
そこに問題があります...
問題は,M4スクリプトの途中で,その初期化を目的としてそれを使用するときに 発生します.これは,あまり注意していない場合,甚大な影響があるはずです. 実行の途中で言語を変更しているようなものです.構文の変更とそれか らの復帰が十分でないことが多いものです.その間でマクロの呼び出しを行なっ た場合,現在の構文はおそらくマクロを実装していないので,これらのマクロは 失われることになります.