Previous: Programming in M4sugar, Up: Programming in M4


8.4 M4shでのプログラミング

M4shは,“mash”と発音し,移植性の高いBourneシェルスクリプトを生成するこ とが狙いです.この名前はLars J. Aasが発明し,Webster's Revised Unabridged Dictionary (1913)にメモがあります.

Mash \Mash\, n. [Akin to G. meisch, maisch, meische, maische, mash, wash, and prob. to AS. miscian to mix. See “Mix”.]
  1. 混合成分の塊を,こう解や圧搾でパルプ状に軟らかくして絞った...
  2. 動物に与える粉餌やぬかと水を混ぜたもの.
  3. 混乱.トラブル. [Obs.] –Beau. & Fl.

今しばらくは,広範囲の使用に十分なほど熟していません.

M4shは,実験してみると残念ながら移植性が無い,一般的なシェルの構成に対す る移植性の高い代替物を提供しています.

— Macro: AS_DIRNAME (pathname)

POSIXで要求されるアルゴリズムを使用しながら,pathname の ディレクトリ部分を返します.これが返すものと,それがdirnameコ マンドより移植性が高い理由の詳細は,See Limitations of Usual Tools.

— Macro: AS_IF (test, [RUN-IF-TRUE], [RUN-IF-FALSE])

シェルコードtestを実行します.TESTがゼロのステータスで終了し た場合,シェルコードのRUN-IF-TRUEを実行し,それ以外ではシェルコー ドのRUN-IF-FALSEを実行し,RUN-IF-TRUERUN-IF-FALSEが 空の場合は何もしません.

— Macro: AS_MKDIR_P (filename)

間に入る必要なディレクトリを含め,ディレクトリfilenameを作成します. これは‘mkdir -p filename’と等価ですが,-pオプション が無い古いバージョンのmkdirに移植性を持たせます.

— Macro: AS_SET_CATFILE (var, dir, file)

シェル変数vardir/fileに設定しますが,一般的に最適な ものにします(dirfileが‘.’のときはfileは絶対パス になるなどです).