逐行读文件一般的写法如下:
| 以下是代码片段: cat filename | while read line; do echo $line; done |
看上去没有什么问题, 而且是网上的同学都让你这么读. 实则有潜在问题很难发现.
我们知道echo 里是默认有转义的,一个"\"反斜杠默认不显示,两个则显示一个,如果你的file里有如下字符
| 以下是引用片段: \s\\s\s |
用上述的代码则输出:
| 以下是引用片段: s\ss |
这着实让我头痛...
在Baidu和google里搜索没有合适的结果,只能自己分析了.
分析
应该不是echo的问题. echo只是输出端, 每个语言的输出都有各自的转义, 举例即是如果变量用单引号声明则是原文输出, 那么上面的line是个变量.
所以问题自然在要么是cat么,要么是read有问题.
测试及结论
cat file里的文件出来仍然是原文\s\\s\s
考虑是否是read有问题. help read出来的文档里是有参数可查的. 查到是参数"r".
| 以下是引用片段: If the -r option is given, this signifies `raw’ input, and backslash escaping is disabled. |
最后原文输出文件的内容代码如下:
| 以下是代码片段: cat filename | while read -r line; do echo $line; done |