技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Linux --> bash shell里反斜杠(backslash)和字符串原文输出(无转义)

bash shell里反斜杠(backslash)和字符串原文输出(无转义)

浏览:6670次  出处信息
问题描述
逐行读文件一般的写法如下:
 

以下是代码片段:
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

建议继续学习:

  1. Bash的模式和配置文件加载    (阅读:23350)
  2. Bash脚本15分钟进阶教程    (阅读:7467)
  3. Bash 小技巧:给目录加上书签,快速切换目录    (阅读:6502)
  4. grep 正则表达式选项要记得转义    (阅读:5095)
  5. Bash如何取得当前正在执行的脚本的绝对路径?    (阅读:4801)
  6. 【总结】美化bash,python的soap client,python获取系统编码函数    (阅读:4293)
  7. Bash Shell 快捷键    (阅读:4005)
  8. bash下利用trap捕捉信号量    (阅读:3805)
  9. .bash_pfofile、.bash_logout和.bashrc    (阅读:3453)
  10. 正则转义符汇总    (阅读:3199)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1