Linux 在bash中读取时的转义规则

Linux 在bash中读取时的转义规则,linux,bash,shell,unix,escaping,Linux,Bash,Shell,Unix,Escaping,假设文件文本按以下方式创建: > cat > text \abc ^D 以下两个脚本生成不同的输出,我不明白为什么 > s=$(cat text) > echo $s \abc > cat text | while read line; do echo $line; done abc 为什么?不使用-r选项读取将解释反斜杠转义,\a将变成a。见: -如果给定此选项,反斜杠不作为转义 性格反斜杠被认为是该行的一部分。在里面 特别是,反斜杠换行符对不能用作行 继续

假设文件文本按以下方式创建:

> cat > text
\abc
^D
以下两个脚本生成不同的输出,我不明白为什么

> s=$(cat text)
> echo $s
\abc
> cat text | while read line; do echo $line; done
abc
为什么?

不使用-r选项读取将解释反斜杠转义,\a将变成a。见:

-如果给定此选项,反斜杠不作为转义 性格反斜杠被认为是该行的一部分。在里面 特别是,反斜杠换行符对不能用作行 继续

不带-r选项的读取将解释反斜杠转义,\a将变成a。见:

-如果给定此选项,反斜杠不作为转义 性格反斜杠被认为是该行的一部分。在里面 特别是,反斜杠换行符对不能用作行 继续


我做到了。在阅读精美手册之前,我问了一个问题。虽然我的一部分人说-r应该是默认行为。非常感谢您的回答。@igor是的,它应该是默认值!此外,Bash手册页非常大且密集,因此不将其牢记在心是情有可原的。对于Bash内置程序,帮助非常有用:帮助阅读包含类似的信息。在阅读精美手册之前,我问了一个问题。虽然我的一部分人说-r应该是默认行为。非常感谢您的回答。@igor是的,它应该是默认值!此外,Bash手册页非常大且密集,因此不将其牢记在心是情有可原的。对于Bash内置,帮助非常有用:帮助读取包含类似的信息。除了读取解释和删除反斜杠之外,echo可能也有问题,因为它的某些版本解释字符串中的转义序列。此外,由于使用变量$line时不带双引号,因此将对其进行单词拆分,并将任何通配符扩展到匹配文件名的列表中。。。这会导致非常奇怪的结果。打印可能包含反斜杠的变量的可靠方法是printf“%s\n”$line。除了读取解释和删除反斜杠之外,echo也可能有问题,因为它的某些版本解释字符串中的转义序列。此外,由于使用变量$line时不带双引号,因此将对其进行单词拆分,并将任何通配符扩展到匹配文件名的列表中。。。这会导致非常奇怪的结果。打印可能包含反斜杠的变量的可靠方法是printf“%s\n”$line。