忘備録

日々の調べ物をまとめる。アウトプットする。基本自分用。

【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"