文字列はシングルクオート(')またはダブルクオート(")で定義することができます。
$ echo "test string"
test string
$ echo 'test string'
test string
文字列も他の変数に格納することができます。
$ TEST='world'
$ echo $TEST
world
シングルクオートとダブルクオートの違いはバックスラッシュ(\)、ドル記号($)、逆クオート(`)の扱いです。 シングルクオートに囲まれた文字列では、すべての文字がそのままの文字として扱われます。 これに対して、ダブルクオートで囲まれた文字列の中では、バックスラッシュ(\)、ドル記号($)、逆クオート(`)が特殊な意味を持ちます。
$ TEST='world'
$ echo 'hello $TEST'
hello $TEST
$ echo "hello $TEST"
hello world
このように、シングルクオートで囲まれた文字はそのまま表示されますが、 ダブルクオートで囲まれた文字列はその中で$以降が変数名であると解釈しようとするため$TEST変数の中身が表示されます。
次にバックスラッシュです。
シングルクオートで囲まれたバックスラッシュはやはりそのままの文字列として解釈されます。
$ echo 'hello \$TEST'
hello \$TEST
ダブルクオートに囲まれたバックスラッシュは、直後の特殊な文字列を打ち消す働きがあります。 バックスラッシュがない場合は、下の例のように$が変数の始まりとして解釈されています。
$ echo "hello $TEST"
hello world
しかし、バックスラッシュを$TESTの直線に入れると、$が変数の先頭であると解釈されなくなります。
$ echo "hello \$TEST"
hello $TEST
最後に逆クオート(`)です。通常、逆クオートで囲まれた文字列はコマンドとして解釈されます。 シングルクオートで囲まれた文字列中で`コマンド`のようにコマンドを(`)で囲んでも何もおこらず、そのままの文字列として扱われます。
$ echo '`hostname`'
`hostname`
しかし、ダブルクオートで囲まれた文字列中で同様に(`)に囲まれたコマンドを記述すると(`)の間の文字列はコマンドとして解釈されます。
$ echo "`hostname`"
localhost
文字列を定義する手段としてダブルクオートとシングルクオートはどちらも利用可能ですが、 特殊な文字を含む文字列では、ダブルクオートを使う場合とシングルクオートを使う場合で動作が異なる点を注意する必要があります。