
gawk マニュアルで
一部の組み込み関数(たとえば
match
、、、、、split
などsub
)は正規表現定数を引数として受け入れるため、正規表現定数をユーザー定義関数の引数として使用しようとすると混乱が発生する可能性があります。たとえば、function mysub(pat, repl, str, global) { if (global) gsub(pat, repl, str) else sub(pat, repl, str) return str } { ... text = "hi! hi yourself!" mysub(/hi/, "howdy", text, 1) ... }
この例では、プログラマーは正規表現定数をユーザー定義関数に渡し
mysub()
、ユーザー定義関数はそれを再度またはsub()
に渡したいとしますgsub()
。ただし、実際に行うことは、pat
一致するかどうかに応じて$0
パラメータに1または0の値が割り当てられることです/hi/
。 gawkは、ユーザー定義関数の引数として使用された正規表現定数を表示したときに警告を表示します。このように実際の値を渡すことは予期しない可能性があるためです。
関数が実際の値ではなく正規表現として引数を受け取るように、正規表現定数を関数に引数として渡すにはどうすればよいですか。
つまり、正規表現定数を関数に渡す前に正規表現定数が文字列一致式で評価されるのを防ぎ、そのように処理するにはどうすればよいですか?
- 正規表現定数を文字列一致式として評価することなく、どのように組み込み関数(例えば、、、
match
)split
に正規表現として渡すことができますか?sub
ありがとうございます。
答え1
関数変数に値を渡すには、引用符を使用する必要があります。
mysub( "hi", "howdy", text, 1)
または、変数に別の名前を使用してください。
thisarg = "hi"
mysub( thisarg, "howdy", text, 1)