このすみろぐ

とあるWebエンジニアが、技術や趣味について書くブログです。

Linuxのシェル変数に、ダブルクォートまたはシングルクォートを含める方法

Linuxについていろいろ試していたときに、シェル変数にダブルクォートを含めたら奇妙な動きをしたので、調べました。

何が起こったかと言うと、シェル変数にダブルクォートを含めたら、単純にダブルクォートだけが消失してしまったのです。

$ TEST=S"YSTE"M
$ echo $TEST
SYSTEM

変数をエスケープしてみる

プログラミングでよくやる、エスケープパターンを試してみます。

$ TEST=S\"YSTE\"M
$ echo $TEST
S"YSTE"M

想定どおりに動いてます。

シングルクォートで括ってみる

次にシングルクォートで括ってみます。 これもプログラミング言語でよくあるパターンです。

$ TEST='S"YSTE"M'
$ echo $TEST
S"YSTE"M

想定どおりに動いてます。

シェル変数にシングルクォートを混ぜるとどうなるのか

次にシングルクォートで試してみます。

$ TEST=S'YSTE'M
$ echo $TEST
SYSTEM

ダブルクォートとまったく同じ現象が発生しました。

シングルクォートをエスケープしてみる

ダブルクォートと同様の動きをしています。

$ TEST=S\'YSTE\'M
$ echo $TEST
S'YSTE'M

ダブルクォートでシングルクォートを括ってみる

これもダブルクォートと同様の動きをしています。

$ TEST="S'YSTE'M"
$ echo $TEST
S'YSTE'M

まとめ

シェル変数にダブルクォートが混入しても、エラーはまったく起きず、単純にクォートが消失するだけの動きは意外でした。