命令 echo 中的反斜杠转义字符

Backslash Escape Character in command echo

提问人:joe 提问时间:8/23/2023 最后编辑:Cyrusjoe 更新时间:8/23/2023 访问量:47

问:

谁能解释为什么\n不能作为换行符工作?

[user1@localhost ~]$ echo -e a\nb\nc
anbnc
bash 行情

评论

4赞 Cyrus 8/23/2023
引用,引用,引用......
4赞 Charles Duffy 8/23/2023
顺便说一句,echo -e 本身就不可靠。更好用 ;在某些配置中(可以在编译时设置,在运行时通过命令设置,在运行时通过从父进程继承的环境变量等),将字符串写入输出!(这在非 bash shell 中更是如此,它可能一开始就不支持打印字符串)。printf '%b\n' 'a\nb\nc'echo -e-e-e

答:

3赞 Gilles Quénot 8/23/2023 #1

使用更多报价!

$ echo -e 'a\nb\nc'
a
b
c

甚至更好:

$ printf 'a\nb\nc'

学习如何在shell中正确引用,这非常重要:

“双引号”每个包含空格/元字符的文字和每个扩展:、。用于代码或文字 、.请参阅
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
https://web.archive.org/web/20230224010517/https://wiki.bash-hackers.org/syntax/words
何时需要双引号
"$var""$(command "$var")""${array[@]}""a & b"'single quotes'$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"'

0赞 user1934428 8/23/2023 #2

bash 将反斜杠解释为转义后续字符。例如,将星号传递给 而不是进行通配。类似地,将文字传递给 ;逃避是不必要的,但不是被禁止的。在您的情况下,shell 会变成 .foo \*foofoo \xxfooa\nb\ncanbnc

如果要传递文字反斜杠,则必须使用 ,例如\\

echo -e a\\nb\\nc

或者,您可以使用单引号,一次性转义整个内容:

echo -e 'a\nb\nc'

或者你不依赖于换行符,而是显式插入它们:echo

echo  $'a\nb\nc'

或者使用HERE文档,在这种情况下,您必须使用而不是:catecho

cat <<EE
a
b
c
EE