内容
よくコーディングの文脈で「バックスラッシュをエスケープする」という言葉をよく聞くのですが、よく考えてみると良く分からず、後輩に説明できなかったので調べました。個人的な調査内容をまとめます。
エスケープシーケンスとは
エスケープシーケンスはエスケープ文字とそれに続く文字の組み合わせです。\n
というエスケープシーケンスがあったとき、\
がエスケープ文字というようです。
「エスケープする」とは
この言葉は結構意味の広い言葉だと感じました。周りの人やネットを漁ると、「特殊な意味を持つ文字に対し、その文字の解釈を変更する指示を埋め込むこと」となるかなと思います。
- 特殊文字の無効化
- 例えば、
"
が文字の開始・終了を表すプログラミング言語のソースコード上で、文字列データとして"
を表現したいときに「エスケープ」します。具体的な例はprint("Hello \"World\"")
など。
- 例えば、
- 特殊文字の表現
- 普通の方法では直接入力できないような特殊な文字(改行やタブ、キャリッジリターンなど)を特定の文字を使って表現すること。例えば、改行を
\n
とエスケープして入力します。
- 普通の方法では直接入力できないような特殊な文字(改行やタブ、キャリッジリターンなど)を特定の文字を使って表現すること。例えば、改行を
おまけ
エスケープ文字「\」を無効にする
多くのプログラミング言語でエスケープ文字は\
ですが、これを無効にする方法が用意されています。
Python
文字列リテラル入力の最初にr
(rawの意)を入力します。
sentence = "C:\\path\\to\\target.txt"
# ↑ 通常はこのように「\」がエスケープ文字であるため、「\」自体を表現したいときには
# 「\\」と入力する必要がある
# ↓
sentence = r"C:\path\to\target.txt"
# ↑ r"..." という文法を使うことで、
# 「\」がエスケープ文字として認識される機能を無効にすることができる
# そのため、「\」を表現したいときは「\」をそのまま入力すればよい
PHP
シングルクォーテーション(’)を使用します。もしくはnowdocを使用します。
echo("C:\\path\\to\\target.txt");
// ↓
echo('C:\path\to\target.txt');
// heredoc
echo(<<<END
C:\\path\\to\\target.txt
END
);
// ↓
// nowdoc
echo(<<<'END'
C:\path\to\target.txt
END
);
C#
文字列リテラル入力の最初に@
を入力します。
string sentence = @"C:\path\to\target.txt";
string sentence = """C:\path\to\target.txt""";
その他の言語にも同様のエスケープ手法がありそうですね。