• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのです)

シェルスクリプトで空白(スペース)を含む変数をawkに渡す方法

このQ&Aのポイント
  • シェルスクリプトで、空白(スペース)を含む変数をawkに渡す方法を教えてください。
  • test.shというファイルで、変数AAAに"x y"という値を代入し、awkで$AAAを出力したいのですが、うまくいきません。
  • awkコマンドの中で変数を使う際、空白(スペース)が含まれる場合の正しい書き方を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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の変数に代入するオプションを使った方がいいと思います。

amu
質問者

お礼

ありがとうございます。原理まで教えていただいて助かります。 awk以外には、これらの方法で応用したいと思います。

その他の回答 (2)

noname#140045
noname#140045
回答No.2

--------------------------------------- #!/bin/sh AAA="x y" export AAA awk 'BEGIN {print ENVIRON["AAA"]}' --------------------------------------- export しないとうまく取得できませんでした。 また、環境変数の取得は ENVIRON を使いました。 echo ""は、説明がないとなんだかわからないのでなるべく使わない方がいいです。

amu
質問者

お礼

ありがとうございます。ENVIRONというのは始めて知りました。

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

代替案とも言えるけど、awk の変数に入れてやったら? echo "" | awk -v aaa="$AAA" '{print aaa}'

amu
質問者

お礼

ありがとうございます! ひとまず、これでうまく行くことが確認できました。助かりました。 ただ、今後の為にも、もし可能なら直接変数を代入できるかどうかを知りたいので、もうすこしだけ質問を受け付け続けさせてください。

関連するQ&A