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