重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

【やりたいこと】

*(アスタリスク)を変数に格納したい

sql="select * from abc"
echo $sql


【問題点】
上記を実行すると下記のように表示され、*がカレントディレクトリのファイル一覧を展開します

select カレントディレクトリのファイル一覧 from abc

何かヒントをお願いします

A 回答 (3件)

確認しておきたいのですが,


echo "select * from abc"
だとどうなりますか?
    • good
    • 0
この回答へのお礼

Tacosanさん コメントありがとうございます

このパターンですと希望通りに表示されます

sql="select * from abc"
echo "$sql"

お礼日時:2011/07/15 09:22

すみません。


なんかおかしいなぁ、とは思っていたんです。
*は展開されなかったような覚えがあったので。

今回の原因が
echo $sql
と書いてしまったことで
echo select * from abc
と展開され、ここで*が展開され、ファイル一覧になっているようです。

ということで、
> *(アスタリスク)を変数に格納したい
されています。

$sqlで展開したときに、続けてファイル一覧に展開されているのが原因なので

・echo "$sql" のようにダブルクォートでくくる
・set -f でファイル名展開を無効にする
とかで
select * from abc
と表示さます。(今回は実際にkshとbashで確認しました)
    • good
    • 0
この回答へのお礼

kmeeコメントありがとうございます

お礼日時:2011/07/15 09:23

ksh というか、bsh系,csh系ともにですが、大きく2つの「文字列」があります。



・ダブルクォートで括ったもの
→中の特殊文字($など)を通常と同じように解釈して展開する。

・シングルクオートで括ったもの
→特殊文字でも展開しない

今回のケースなら
#展開しないシングルクオートを使用
sql='select * from abc'

他にもいろいろとあります。
man ksh (やman 各シェル)で説明が読めるはずです。シェルの基本中の基本なので覚えておきましょう。

この回答への補足

kmeeさん コメントありがとうございます

sql='select * from abc'
echo $sql

指摘どおりにシングルコーテーションにしましたが、echoにて表示するとファイル名が展開されます

補足日時:2011/07/14 09:11
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!