【ShellScript】シングルクォートとダブルクォートの違い
シングルクォート
- シングルクォートで括られた文字列は、特殊文字としていっさい解釈されなくなる
# シングルクォートで括られた場合 $ echo '~' ~ # 括らない場合 $ echo ~ /Users/mktktmr
使いどころ
- 特殊文字を普通の文字として扱うとき
エスケープ
# 「\」でエスケープできる $ echo \' '
#シングルクォートを含む文字列をシングルクォートで括りたい場合、 #シングルクォート自身はシングルクォートで括れないため、いったん閉じてエスケープする必要がある $ echo 'I'\''m Yours' # 'I' + \' + 'm Yours' ということ I'm Yours
ダブルクォート
- ダブルクォートで括られた文字列は、一部の文字を除いて特殊文字として解釈されなくなる
# パラメータ展開の「$」、コマンド置換の「`」、エスケープの「\」は括られても特殊文字として解釈される $ echo "100\$" #エスケープ 100$ $ echo "$HOME" #パラメータ展開 /Users/mktktmr $ echo "1日は`expr 60 \* 60 \* 24`秒です" #コマンド置換 1日は86400秒です
使いどころ
- 展開されたパラメータに含まれる特殊文字が解釈されないようにするとき
$ HOGE='* はアスタリスクと読みます' # ダブルクォートで括らないと。。。 $ echo $HOGE Applications Desktop Documents... はアスタリスクと読みます # *が解釈されてパス展開されている # ダブルクォートで括る $ echo "$HOGE" * はアスタリスクと読みます
エスケープ
# 「\」でエスケープできる $ echo "My ID is \"mktktmr\"" #シングルクォートと違い自身を括れる My ID is "mktktmr"