- ベストアンサー
シェルスクリプトで空白(スペース)を含む変数をawkに渡す方法
- シェルスクリプトで、空白(スペース)を含む変数をawkに渡す方法を教えてください。
- test.shというファイルで、変数AAAに"x y"という値を代入し、awkで$AAAを出力したいのですが、うまくいきません。
- awkコマンドの中で変数を使う際、空白(スペース)が含まれる場合の正しい書き方を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
この場合、$AAAを展開するのは、awkではなく/bin/shです。 shで$AAAを展開して echo "" | awk '{print "x y"}' の形にして実行します。 更に詳しく言えば awkの引数が {print "x y"} という文字列になるようにします。 (awkにx yが一つの文字列として認識されるように""で括った状態に) シングルクオートで括ってあるのは、sh側の都合で、awkにわシングルクオートは渡されません。 例えば echo '' | awk "{print \"${AAA}\"}" ( "の中の"はバックスラッシュでエスケープ ) echo '' | awk '{print "'"${AAA}"`"}' ( 展開の必要の無い箇所はシングルクオートで。 展開する${AAA}の直前でシングルクオートを一旦閉じて 展開が終ったら、またシングルクオートで ) ただ、どうしても煩雑になるので、やはり、直接awkの変数に代入するオプションを使った方がいいと思います。
その他の回答 (2)
--------------------------------------- #!/bin/sh AAA="x y" export AAA awk 'BEGIN {print ENVIRON["AAA"]}' --------------------------------------- export しないとうまく取得できませんでした。 また、環境変数の取得は ENVIRON を使いました。 echo ""は、説明がないとなんだかわからないのでなるべく使わない方がいいです。
お礼
ありがとうございます。ENVIRONというのは始めて知りました。
- trapezium
- ベストアンサー率62% (276/442)
代替案とも言えるけど、awk の変数に入れてやったら? echo "" | awk -v aaa="$AAA" '{print aaa}'
お礼
ありがとうございます! ひとまず、これでうまく行くことが確認できました。助かりました。 ただ、今後の為にも、もし可能なら直接変数を代入できるかどうかを知りたいので、もうすこしだけ質問を受け付け続けさせてください。
お礼
ありがとうございます。原理まで教えていただいて助かります。 awk以外には、これらの方法で応用したいと思います。