Rubyについて Part 27
■ このスレッドは過去ログ倉庫に格納されています
0768デフォルトの名無しさん
2007/07/20(金) 23:58:24> ruby -ve "$><<ARGV*':'" "\"\'" '\"\'' \" \' \ \\ \\\ \\\\ "\ \\ \\\ \\\\ \\\" \\\'" '\ \\ \\\ \\\\ \\\" \\\''
ruby 1.8.4 (2005-12-24) [i386-mingw32]
"':"':\":\':\:\\:\\\:\\\\:\ \\ \\\ \\\\ \" \':\ \\ \\\ \\\\ \" \'
ってなってクォーティング中の'も"もエスケープが効いて\が消えちゃってる
単独のクォート文字はエスケープしてもそのままなのだけど、クォーティング開始にはならない(この動作は変だと思う)
クォーティング中の\のエスケープは \"と\'の前とクォーティング末尾にあるとき必要
シングルクォーティングとダブルクォーティングのエスケープ動作に違いはない
Cのスタートアップルーチンそのままだと思われるActivePerl 5.8.4だとダブルクォーティングしか効かないけど
> perl -e "print join(':',@ARGV)" "\"\'" \" \ \\ \\\ \\\\ "\ \\ \\\ \\\\ \\\""
"\':":\:\\:\\\:\\\\:\ \\ \\\ \\\\ \"
となってダブルクォーティング中のシングルクォートはそのままでエスケープ対象にならず
単独のダブルクォートはエスケープ対象になる
クォーティング中の\のエスケープは \"の前とクォーティング末尾にあるとき必要
(Mingwで作った引数表示するだけのツールでも同様だった)
Windowsの標準動作?でも、直感的に納得できる動作をしてる
で、Windows版rubyもクォート中の別種のクォートはエスケープ無効のほうがいいと思う
じゃないと
> ruby -ve "$><<ARGV*':'" "'\' '\\' '\\\' '\\\\' '\\\\\' '\\\\\\' '\\\\\\\'"
ruby 1.8.4 (2005-12-24) [i386-mingw32]
'' '\\' '\' '\\\\' '\\' '\\\\\\' '\\\'
となんだかわけのわからんことに、というかなんか変な挙動してないか
UNIXだとどうなの?
■ このスレッドは過去ログ倉庫に格納されています