Last Update 2022/06/07
引用符
テスト概要
各種パターンを含むサンプルスクリプトファイルの実行
単一引用符間に単一引用符を記述した際の挙動
単一引用符間にバックスラッシュを伴う単一引用符を記述した際の挙動
$'
文字列
' 形式の出力例
(バックスラッシュ・エスケープ・シーケンスのデコード)
(バックスラッシュ・エスケープ・シーケンスのデコード)
サンプルスクリプトファイル
sample.sh
#!/bin/bash
samplevar="sample string"
echo 例01 文字列1 文字列2
echo 例02 "文字列1 文字列2"
echo 例03 '文字列1 文字列2'
echo 例04 文字列1 \
文字列2
echo 例05 "文字列1 \
文字列2"
echo 例06 '文字列1 \
文字列2'
echo 例07 $samplevar
echo 例08 "$samplevar"
echo 例09 '$samplevar'
echo 例10 \$samplevar
echo 例11 \"$samplevar\"
echo 例12 \"\$samplevar\"
echo 例13 \'$samplevar\'
サンプルスクリプトファイルの実行
$ ./sample.sh
例01 文字列1 文字列2
例02 文字列1 文字列2
例03 文字列1 文字列2
例04 文字列1 文字列2
例05 文字列1 文字列2
例06 文字列1 \
文字列2
例07 sample string
例08 sample string
例09 $samplevar
例10 $samplevar
例11 "sample string"
例12 "$samplevar"
例13 'sample string'
$
例01 引用符無しの文字列1と文字列2は空白で区切られた引数として処理
文字列1、2以外の空白は無視
例02 二重引用符で囲まれた「文字列1+空白(複数)+文字列2」をリテラルとして出力
例03 単一引用符で囲まれた「文字列1+空白(複数)+文字列2」をリテラルとして出力
例04 引用符無しの文字列1と文字列2は空白で区切られた引数として処理
「\改行」 は行の継続として機能
例05 二重引用符で囲まれた「文字列1+空白(複数)+文字列2」を出力
「\改行」 は行の継続として機能
例06 単一引用符で囲まれた「文字列1+空白(複数)・改行+文字列2」をリテラルとして出力
「\改行」 もそのまま出力
例07 引用符無しの「$」付き文字列は変数として展開
例08 二重引用符で囲まれた「$」付き文字列も変数として展開
例09 単一引用符で囲まれた「$」付き文字列はリテラルとして出力
例10 引用符無しの「\$」付き文字列
バックスラッシュがエスケープ文字として機能し、「$」をリテラルとして出力
例11 「\"」で囲まれた「$」付き文字列
バックスラッシュがエスケープ文字として機能
二重引用符で囲まれた展開された変数値として出力
例12 「\"」で囲まれた「\$」付き文字列
両方のバックスラッシュがエスケープ文字として機能
二重引用符と「$」をリテラルとして出力
例13 「\'」で囲まれた「$」付き文字列
バックスラッシュがエスケープ文字として機能
単一引用符で囲まれた展開された変数値として出力
単一引用符間に単一引用符を記述した際の挙動
確認用スクリプトファイル
sample2.sh
#!/bin/bash
echo '''
実行結果
$ ./sample2.sh
./sample2.sh: line 3: unexpected EOF while looking for matching `''
./sample2.sh: line 5: syntax error: unexpected end of file
$
3番目の単一引用符と対になる単一引用符が見当たらない事によるエラーが発生
単一引用符間にバックスラッシュを伴う単一引用符を記述した際の挙動
確認用スクリプトファイル
sample3.sh
#!/bin/bash
echo '\''
実行結果
$ ./sample3.sh
./sample3.sh: line 3: unexpected EOF while looking for matching `''
./sample3.sh: line 5: syntax error: unexpected end of file
$
単一引用符の効果により、バックスラッシュがエスケープ文字として機能せず、「その2」と同様のエラーが発生
$'
文字列
' 形式の出力例
(バックスラッシュ・エスケープ・シーケンスのデコード)
(バックスラッシュ・エスケープ・シーケンスのデコード)
確認用スクリプトファイル
sample4.sh
#!/bin/bash
s="123"
# 変数
echo "例01 ---" $'ab$scd'
# \b バックスペース
echo "例02 ---" $'ab\bcd'
# \n 改行
echo "例03 ---" $'ab\ncd'
# \t 水平タブ
echo "例04-1 -" $'ab\tcd'
echo "例04-2 -" $'ab\t\tcd'
# \v 垂直タブ
echo "例05 ---" $'ab\vcd'
# \\ バックスラッシュ
echo "例06 ---" $'ab\\cd'
# \' 単一引用符
echo "例07 ---" $'ab\'cd'
# \" 二重引用符
echo "例08 ---" $'ab\"cd'
# \nnn 8進数nnnを値とする8ビット文字
echo "例09 ---" $'ab \060 cd'
# \xHH 16進数HHを値とする8ビット文字
echo "例10 ---" $'ab \x30 cd'
# \uHHHH 16進数HHHHを値とするUnicode文字
echo "例11 ---" $'ab \uFF10 cd'
# \UHHHHHHHH 16進数HHHHHHHHを値とするUnicode文字
echo "例12 ---" $'ab \U0000FF10 cd'
# control-x文字
if [[ $'\n' == $'\cJ' ]]; then
echo "例13 ---" $'ab\cJcd'
fi
実行結果
$ ./sample4.sh
例01 --- ab$scd
例02 --- acd
例03 --- ab
cd
例04-1 - ab cd
例04-2 - ab cd
例05 --- ab
cd
例06 --- ab\cd
例07 --- ab'cd
例08 --- ab"cd
例09 --- ab 0 cd
例10 --- ab 0 cd
例11 --- ab 0 cd
例12 --- ab 0 cd
例13 --- ab
cd
$
例01 文字列に含まれる変数は展開されずリテラルとして出力
例02 バックスペース出力で直前の文字「b」を消去
例03 改行を出力
例04-1 水平タブ×1を出力
例04-2 水平タブ×2を出力
例05 垂直タブを出力
例06 バックスラッシュを出力
例07 単一引用符を出力
例08 二重引用符を出力
例09 「0」(文字コード : 8進数060)を出力
例10 「0」(文字コード : 16進数0x30)を出力
例11 「0」(文字コード : 16進数0xFF10)を出力
例12 「0」(文字コード : 16進数0xF0000F10)を出力
例13 Control-Jを出力
実行環境
GNU bash, version 5.1.16
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。