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