- ベストアンサー
Kシェルの変数に*を格納したい
【やりたいこと】 *(アスタリスク)を変数に格納したい sql="select * from abc" echo $sql 【問題点】 上記を実行すると下記のように表示され、*がカレントディレクトリのファイル一覧を展開します select カレントディレクトリのファイル一覧 from abc 何かヒントをお願いします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
確認しておきたいのですが, echo "select * from abc" だとどうなりますか?
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
すみません。 なんかおかしいなぁ、とは思っていたんです。 *は展開されなかったような覚えがあったので。 今回の原因が echo $sql と書いてしまったことで echo select * from abc と展開され、ここで*が展開され、ファイル一覧になっているようです。 ということで、 > *(アスタリスク)を変数に格納したい されています。 $sqlで展開したときに、続けてファイル一覧に展開されているのが原因なので ・echo "$sql" のようにダブルクォートでくくる ・set -f でファイル名展開を無効にする とかで select * from abc と表示さます。(今回は実際にkshとbashで確認しました)
お礼
kmeeコメントありがとうございます
- kmee
- ベストアンサー率55% (1857/3366)
ksh というか、bsh系,csh系ともにですが、大きく2つの「文字列」があります。 ・ダブルクォートで括ったもの →中の特殊文字($など)を通常と同じように解釈して展開する。 ・シングルクオートで括ったもの →特殊文字でも展開しない 今回のケースなら #展開しないシングルクオートを使用 sql='select * from abc' 他にもいろいろとあります。 man ksh (やman 各シェル)で説明が読めるはずです。シェルの基本中の基本なので覚えておきましょう。
補足
kmeeさん コメントありがとうございます sql='select * from abc' echo $sql 指摘どおりにシングルコーテーションにしましたが、echoにて表示するとファイル名が展開されます
お礼
Tacosanさん コメントありがとうございます このパターンですと希望通りに表示されます sql="select * from abc" echo "$sql"