在 bash 中读取时转义规则

igo*_*gor 2 unix linux bash shell escaping

假设文件text创建如下:

> cat > text
\abc
^D
Run Code Online (Sandbox Code Playgroud)

以下两个脚本生成不同的输出,我不明白为什么。

> s=$(cat text)
> echo $s
\abc
> cat text | while read line; do echo $line; done
abc
Run Code Online (Sandbox Code Playgroud)

为什么?

Ben*_* W. 5

read如果没有该-r选项,则会解释反斜杠转义,并\a变为a. 请参阅手册

-r
如果给出此选项,反斜杠不会充当转义字符。反斜杠被认为是该行的一部分。特别是,反斜杠-换行对不能用作行延续。