• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シェル内で「'」に囲まれた部分への変数の展開)

シェル内で変数の展開方法とは?

このQ&Aのポイント
  • シェル内で変数を展開させる方法を教えてください。
  • シェル内でシングルクォーテーションに囲まれた部分への変数の展開方法について教えてください。
  • 変数をシェル内でクォーテーションを持たせずに展開させる方法を教えてください。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> FROM_DATETIME=2010-10-10 00:00:00 > TO___DATETIME=2010-12-10 00:00:00 これは 環境変数FROM_DATETIMEを2010-10-10に(一時的に)設定→ 00:00:00 コマンドを実行 と解釈されます。(00:00:00などというコマンドはおそらく無いので、エラーになります) FROM_DATETIME="2010-10-10 00:00:00" FROM_DATETIME='2010-10-10 00:00:00' FROM_DATETIME=2010-10-10\ 00:00:00 など、空白が変数にセットする値の一部であることを明示する必要があります。 これは > シェルの引数として渡して実行したい 場合でも同じです。 (この「シェル」が「シェルスクリプト」だとして) foo.sh 2010-10-10 00:00:00 2010-12-10 00:00:00 としたら $1:2010-19-10 $2:00:00:00 $3:2010-12-10 $4:00:00:00 となります。$1が2010-10-10 00:00:00になるようにするには、 foo.sh "2010-10-10 00:00:00" "2010-12-10 00:00:00" foo.sh '2010-10-10 00:00:00' '2010-12-10 00:00:00' foo.sh 2010-10-10\ 00:00:00 2010-12-10\ 00:00:00 等とする必要があります。あるいは、前のコマンドラインのまま FROM_DATETIME="$1 $2" TO___DATETIME="$3 $4" とするか。 今のを直すなら FROM_DATETIME='2010-10-10 00:00:00' TO___DATETIME='2010-12-10 00:00:00' # このシングルクオートは「ひとまとめ」にするためのもので、 # 変数の中にはシングルクオート自体は含まれない。 # ダブルクォートでも(今回は展開されるような記述がないので)同等。 # \による空白のエスケープでも同等 to_date('${FROM_DATETIME}', 'YYYY-MM-DD HH24:MI:SS') and to_date('${TO___DATETIME}', 'YYYY-MM-DD HH24:MI:SS') # ヒアドキュメントの中のシングルクオートは特殊な意味のないただの文字なので、エスケープは不要 でいいはずです。

mibusys
質問者

お礼

直接的な回答だけでなく、対処方法のバリエーションを いくつか教えていただき参考になしました。 >ヒアドキュメントの中のシングルクオートは >特殊な意味のないただの文字なので、エスケープは不要 特にこれも勉強になりました。 No.1さんのご回答で直面している問題自体は回避できたのですが、 いろいろ勉強になりました。ありがとうございました。

その他の回答 (1)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

まず、 >FROM_DATETIME=2010-10-10 00:00:00 >TO___DATETIME=2010-12-10 00:00:00 これができないですね。 FROM_DATETIME="2010-10-10 00:00:00" TO___DATETIME="2010-12-10 00:00:00" のように"か'で囲まないと。 これでできますよ。 FROM_DATETIME="2010-10-10 00:00:00" TO___DATETIME="2010-12-10 00:00:00" sqlplus scott/tiger@oracle << EOT set echo on select count(*) from msn3 where dcol between to_date('${FROM_DATETIME}', 'YYYY-MM-DD HH24:MI:SS') and to_date('${TO___DATETIME}', 'YYYY-MM-DD HH24:MI:SS') / quit EOT

mibusys
質問者

お礼

おっと。これでいいんですか。どこでつまづいているかすら きちんと把握できていなかったようですね。 助かりました。ご回答ありがとうございました。

関連するQ&A