m4 -Dオプションが置き換えを行わないのはなぜですか?

m4 -Dオプションが置き換えを行わないのはなぜですか?

-DQUOTE=yes以下のコードはどのように機能しますか?

2行目が出ると思いました。ifelse(yes,yes,Learn Linux today!)

他の部分は私にとって意味があります。

~からLinuxポケットガイド - Daniel J. Barrett

$ cat myfile 
My name is NAME and I am AGE years old.
ifelse(QUOTE,yes,Learn Linux today!)


$ m4 -DNAME=Sandy -DAGE=25 -DQUOTE=yes myfile
My name is Sandy and I am 25 years old.
Learn Linux today!

ベストアンサー1

m4多くの組み込み処理マクロが入力に現れると、プロセッサはそのマクロの名前を認識し、ifelseその一つである。

通常、これらのガイドラインを誤って処理するのを防ぐために、そのm4オプションと一緒に使用されます。を-P使用するには、など実際に処理するすべての組み込みディレクティブの名前の前に-P文字列を追加する必要があります。m4_m4_definem4_ifelsem4_dnl

m4_これにより、プレフィックスのない命令はテキストとして扱われないため、入力でマクロ命令が予期せず実行されるのを防ぎます。

$ cat file
My name is NAME and I am AGE years old.
ifelse(QUOTE,yes,Learn Linux today!)
$ m4 -P -DNAME=Sandy -DAGE=25 -DQUOTE=yes file
My name is Sandy and I am 25 years old.
ifelse(yes,yes,Learn Linux today!)

それ以外の場合は、-Pマルチブランチコマンドとして扱われますifelse。この指示はm4ifthenelseここに録音してください。簡単に言えば、最初の2つのパラメータが同じ場合、命令全体は3番目のパラメータに置き換えられます。これは、初期コマンドの実行時に表示されるものです。最初のyes(で拡張QUOTE)は2番目のパラメータと同じであるyesため、Learn Linux today!拡張されます。QUOTE別の文字列で定義した場合、ifelseディレクティブは4番目の引数に置き換えられますが、文書に4番目の引数がないため、別の項目に置き換えられます(つまり削除されます)。

おすすめ記事