Ruby中的chop和chomp用法辨析
还没开始系统性的学习Ruby,最近在看metasploit框架的exploit会涉及到Ruby脚本,也就硬着头皮一遍查阅资料一遍做些笔记吧。
Ruby字符串中存在chop和chomp的内置函数。我在http://www.w3cschool.cc/ruby/ruby-string.html中得到的关于Ruby字符串chop和chomp的用法介绍如下:
str.chomp
从字符串末尾移除记录分隔符($/),通常是 \n。如果没有记录分隔符,则不进行任何操作。
str.chomp!
与 chomp 相同,但是 str 会发生变化并返回。
str.chop
移除 str 中的最后一个字符。
str.chop!
与 chop 相同,但是 str 会发生变化并返回。
单从这几句话,还是有些不明白(貌似借鉴于perl语言中的chop和chomp函数的用法),然后百度了一下,我在http://blog.chinaunix.net/uid-20691105-id-1568659.html得到如下内容:
chomp和chop的区别:
chomp:去掉字符串末尾的\n或\r
chop:去掉字符串末尾的最后一个字符,不管是\n\r还是普通字符
"hello".chomp #=> "hello"
"hello\n".chomp #=> "hello"
"hello\r\n".chomp #=> "hello"
"hello\n\r".chomp #=> "hello\n"
"hello\r".chomp #=> "hello"
"hello".chomp("llo") #=> "he"
"string\r\n".chop #=> "string"
"string\n\r".chop #=> "string\n"
"string\n".chop #=> "string"
"string".chop #=> "strin"
我在本机逐个尝试上面的字符串,并且输出,得到如下所示:
首先,可以看到print是不输出换行符的(不会自动换行),但是会解析双引号中的转义字符,可以看到print输出了字符串中的换行符\n和回车符\r。我之前有点迷惑的是“\r\n”,“\n\r”这两个前后顺序不同时,chop和chomp函数是如何处理的。从运行的结果看,当字符串最后面跟的是“\r\n”时,”\r\n”都会被去掉,而当字符串最后面跟的是”\n\r”时,只会去掉回车符。好吧,总算是明白了。