提问人:joe 提问时间:8/23/2023 最后编辑:Cyrusjoe 更新时间:8/23/2023 访问量:47
命令 echo 中的反斜杠转义字符
Backslash Escape Character in command echo
答:
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 \*
foo
foo \x
x
foo
a\nb\nc
anbnc
如果要传递文字反斜杠,则必须使用 ,例如\\
echo -e a\\nb\\nc
或者,您可以使用单引号,一次性转义整个内容:
echo -e 'a\nb\nc'
或者你不依赖于换行符,而是显式插入它们:echo
echo $'a\nb\nc'
或者使用HERE文档,在这种情况下,您必须使用而不是:cat
echo
cat <<EE
a
b
c
EE
评论
echo -e
本身就不可靠。更好用 ;在某些配置中(可以在编译时设置,在运行时通过命令设置,在运行时通过从父进程继承的环境变量等),将字符串写入输出!(这在非 bash shell 中更是如此,它可能一开始就不支持打印字符串)。printf '%b\n' 'a\nb\nc'
echo -e
-e
-e