9
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

バックスラッシュはどんな場合にエスケープ文字として解釈されるか

シェルスクリプトを書いてると、いつの間にか\が一本無くなってたり、エスケープが上手くいかなかったりして混乱するので、バックスラッシュがどのような場合にエスケープ文字として解釈されるかまとめてみました。

注意

完全な内容ではないです。
ユーザーコマンドはGNU版です。

bash自身

行末にある場合は行の継続として解釈する。それ以外はそれに続く文字として解釈する。(ちなみにこのバックスラッシュは後述のシングルクォート、ダブルクォートと並ぶクォートの一種)

$ \echo delta
delta
$ \\echo delta
コマンド '\echo' は見つかりませんでした。もしかして:
 コマンド 'aecho' - パッケージ 'netatalk' (universe)
 コマンド 'echo' - パッケージ 'coreutils' (main)
\echo: コマンドが見つかりません
$ echo \
> delta
delta

echo自身後で説明するので、循環参照っぽい例になってますが勘弁してください。

シングルクォート

エスケープ文字として解釈しない。(∴シングルクォートの中にシングルクォートを置くことはできない?)

$ echo '\\'
\\

ダブルクォート

エスケープ文字として解釈する。ただし後続の文字が$, `, ", \, 及び改行の場合に限る。

$ echo "\\\$\tEOT"
\$\tEOT # \tはタブではない

ヒアドキュメント

テキスト終端記号がクォートされているかどうかで挙動が変わる。クォートされていない場合はエスケープ文字として解釈する。ただし後続の文字は$, `, \であり、改行が続く場合は無視される。

$ cat <<EOF
> \\
> \$
> \t
> \
> EOF
\
$
\t
$ cat <<"EOF"
> \\
> \
> EOF
\\
\

コマンド

凡例

項目 意味
デフォルト Yes/No デフォルトでバックスラッシュをエスケープ文字として解釈するか
反転オプション オプション文字列 動作を反転させるオプション
後続文字 文字のリスト バックスラッシュの後に置いた時に特別に解釈される文字

後続文字の意味などはマニュアルを参照のこと。マニュアルなどで確認できない場合は項目自体なし。

read

デフォルト:Yes
反転オプション:-r

$ read line; echo $line
\\ # 入力
\
$ read -r line; echo $line
\\ # 入力
\\

echo(組み込み / 外部)

デフォルト:No
反転オプション:-e
後続文字:\,a,b,c,e,f,n,r,t,v,0NNN,xHH,E(組み込み),uHHHH(組み込み),UHHHHHHHH(組み込み)

$ echo \ttest
ttest
$ echo -e \ttest
ttest # bash自身のエスケープ解釈
$ echo -e '\ttest'
    test
$ echo '\j'
\j

ちなみに-Eでエスケープシーケンスを解釈しないよう指示できる。zshのechoはデフォルトでエスケープシーケンスを解釈し、-Eで抑制できる(らしい)。

printf (組み込み / 外部)

エスケープ文字として解釈する。エスケープシーケンスはフォーマット文字列中に埋め込むこともできるし、%bによって引数文字列中のエスケープシーケンスを解釈するようにもできる。

$ printf '%s\t%b\n' 'abc\tdef' 'ghi\tjkl'
abc\tdef    ghi jkl
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
9
Help us understand the problem. What are the problem?