Cシェルにおいてはコマンドラインの
メタキャラクター
、変数などは実行される前に展開される。
つまり
# set x = 3 # echo $x 3 #
の様に上の例で
echo $x
の部分は変数xの内容に置き換えられて
echo 3
と変えられてから実行される。
しかしある場合にはこの変換を実行したくないこともある。
もう一度上の例で
echo $x
$x をそのまま画面に出力したいと思った時どうすれば良いだろうか。
こういう場合にはエスケープ(下の例では \ バックスラッシュ)を使用して、
echo \$x
とすればよろしい。
一文字の場合は、上の \ バックスラッシュでも良いが複数の文字(文字列)を
エスケープしたい時は " ダブルクォート、 ' シングルクォートなどを使用する。
# ls test.c # echo $x * 3.5 3 test.c 3.5 <-- なぜ test.c が表示されている? # echo "$x * 3.5" 3 * 3.5 <-- 今度は test.c が消えた。 # echo '$x * 3.5' $x * 3.5 <-- $xも変換されなくなった。 #
これらの違いは以下の通り。
つまり上の例で最初の
# echo $x * 3.5
に test.c が表示されたのは * が
メタキャラクター
だと判断されて
そのディレクトリーにあるファイルを表示したためである。
(この場合 * はどんなファイル名にもマッチするので現在のディレクトリーにある
ファイルを全部表示する)
次の
# echo "$x * 3.5"
で test.c が消えて $x だけが変換されたのは " が変数以外のものをエスケープするからである。 最後の
# echo '$x * 3.5'
では全ての文字がエスケープされるので、文字がそのまま表示されている。