Cシェルのエスケープ

エスケープとは

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'

では全ての文字がエスケープされるので、文字がそのまま表示されている。


Home | Contents
Mail