• ベストアンサー

簡単なシェルスクリプトを見てください。

次のようなシェルスクリプトを作成しました。 #!/bin/sh echo [$1] awk '/"0312345678"/ {print}' /test > /test1 awk '/$1/ {print}' /test > /test2 のように簡単なスクリプトです。 $ sample \"0312345678\" で実行させたら、echo では"0312345678"に出力されます。 しかし、test1にはちゃんと結果が入っていますが、test2は空のファイルです。 なぜ、結果が違うのですか? 実行時、引数を渡す方法で、test1と同じ結果を得たければ、どうすればいいのですか?

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

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.2

シングルクォーテーション(')に囲まれているシェル変数は展開されません。 No.1の方が書かれたダブルクォーテーション(")で囲む以外にも、シングルクォーテーション(')で囲まれていなければ展開されるわけですからシングルクォーテーション(')の囲みから一時的に外せばいいです。 awk '/'$1'/ {print}' /test > /test2

junho76
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • grape16
  • ベストアンサー率55% (52/93)
回答No.1

「'」で囲うと$1等の展開は行われません。展開させたいときは「"」で囲うようにします。 次のように修正すればちゃんと動作しますよ。 awk "/$1/ {print}" /test > /test2

関連するQ&A