2017-01-06 6 views
-1

値がハッシュであれば、m4に行の処理を続行させる方法は?新しい値にハッシュ(#)が含まれているとm4が処理を停止する

$ echo a a a | m4 -D a=B+ 
B+ B+ B+ 
$ echo a a a | m4 -D a=B# 
B# a a 

2番目のケースでは同じ動作が必要ですか? (置き換えられる3つの出現すべて)。

私の理解では、動作が矛盾しており、ユーザーマニュアルに説明が見つかりませんでした。

+1

m4はタグシステムではありません。文字は「ハッシュ」と呼ばれます。 – melpomene

答えて

4

#文字はコメントの最初の文字で、改行が最後の文字です。 m4は最初にaを解析し、B#に置き換えます。それはコメントに実行されるので、それ以上スキャンしません。

ソリューションはchangecomでコメント文字を変更することです:あなたはより良いコメントbegin-とエンドシーケンスを選択することができます。もちろん、

$ echo "changecom(BC,EC)a a a" | m4 -D a=B# 
B# B# B# 

ps。引数なしの簡単なchangecomでコメントをオフにすることができます:echo changecom a a a。あなたはマニュアルからそれを読むことができます:)

+0

ありがとうございました。私は今のところ問題を取り組んだが、それでもやはり矛盾した動作をしているようだ。価値(私が第三者から取る)に別のchangecom()が含まれている場合はどうなりますか?これまでのところ私は 'スタックオーバーフロー'を起こしています:echo "changecom(BC、EC)a a" | m4 -D 'a = B#changecom(a)'。私は答えを受け入れますが、私は実際には現在のアプローチを概念的に理解することはできませんし、対処する方法もあります。 – noonex

+0

私は概念的には処理前にコメントを取り除かなければならないと思っていますが、とにかくエッジケースの問題を抱えていて、ツールは回避策で役に立つかもしれません – noonex

+0

これは矛盾した動作ではなく、 'm4'は入力を解析し、既知のキーワード(およびマクロ)を検索し、定義に"置き換える "。あなたがファイルをインクルードしたいと思って、解析したくなければ、 'paste'を使うことができます。それが役に立ちましたら、 'm4'に' -P'オプションを付けることができます。または...あなたがそれを知っているべきツールを使用したい場合: – uzsolt

関連する問題