IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

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

never-online 2011-02-15 22:57:47 累计浏览 7,803 次
本机暂存
问题描述
逐行读文件一般的写法如下:
 
以下是代码片段:
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. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. Bash的模式和配置文件加载 (累计阅读 24,410)
  2. 28个Unix/Linux的命令行神器 (累计阅读 16,791)
  3. 我常用的主机监控shell脚本 (累计阅读 13,433)
  4. 高效Linux用户需要了解的命令行技能 (累计阅读 12,826)
  5. 100个常用的linux命令 (累计阅读 11,607)
  6. Linux命令行里的“瑞士军刀” (累计阅读 11,585)
  7. linux 建立两台机器的信任关系 (累计阅读 11,485)
  8. 每个程序员都应该知道的8个Linux命令 (累计阅读 10,745)
  9. 最受欢迎的10个 Linux 单行命令 (累计阅读 10,131)
  10. 利用脚本分析日志并利用snmp自定义OID,再通过cacti画图 (累计阅读 10,075)