質問: シェル変数を/ pattern /としてawkに渡します 私のシェル関数の1つに以下を持っています:function _process () { awk -v l="$line" ' begin {p=0} /'"$1"'/ {p=1} end{ if(p) print l >> "outfile.txt" } ' } なので、_process $argとして呼び出されると、$argは$1として渡され、検索パターンとして使用されます。 shellはawkパターンの代わりに$1を展開するため、このように機能します。また、lは、-v l="$line"で宣言されているawkプログラム内で使用できます。大丈夫だ。同じようにパターンを変数として検索することは可能ですか?以下は動作しません、awk -v l="$line" -v search="$pattern" ' begin {p=0} /search/ {p=1} end{ if(p) print l >> "outfile.txt" } ' 、なぜならawkは/search/を変数として解釈せず、文字どおりに解釈するからです。
回答: awkの~演算子。右側に正規表現のリテラルを指定する必要はありません。function _process () { awk -v l="$line" -v pattern="$1" ' $0 ~ pattern {p=1} end {if(p) print l >> "outfile.txt"} ' } これはより効率的ですが(ファイル全体を読み取る必要はありません)function _process () { grep -q "$1" && echo "$line" } パターンによっては、grep -eq "$1"