シングルクォートと%q記法のバックスラッシュの動作について。
シングルクォートと%q記法内のバックスラッシュは、バックスラッシュとクォート文字をエスケープする。
記法 | エスケープ対象 |
---|---|
シングルクォート | \と' |
%q!...! | \と! |
%q(...) | \と(と) |
%qではバックスラッシュがシングルクォートに効かないので、以下の2つが同じ \\' になる。ここが混乱する。
irb(main):016:0> puts %q{\\\'} # エスケープされたバックスラッシュ(\\)と、単独のバックスラッシュ(\)と、シングルクォート(') \\' => nil irb(main):017:0> puts %q{\\\\'} # エスケープされたバックスラッシュ(\\)が2つと、シングルクォート(') \\' => nil
%q''は、シングルクォートと同じ。
irb(main):018:0> puts %q'\\\'' \' => nil irb(main):019:0> puts '\\\'' \' => nil