Linux 如何使shell中的echo或printf忽略双反斜杠(\\)并按我看到的方式打印它
我试图在我的shell脚本中输入一些ascii艺术字,我同时使用了两个反斜杠(\\),我希望echo或printf将这两个反斜杠打印在一起。有什么东西可以放在echo或printf后面,让它们直接打印双引号(“)中的每个字符吗 例如,我想要:Linux 如何使shell中的echo或printf忽略双反斜杠(\\)并按我看到的方式打印它,linux,shell,printf,ascii,echo,Linux,Shell,Printf,Ascii,Echo,我试图在我的shell脚本中输入一些ascii艺术字,我同时使用了两个反斜杠(\\),我希望echo或printf将这两个反斜杠打印在一起。有什么东西可以放在echo或printf后面,让它们直接打印双引号(“)中的每个字符吗 例如,我想要: echo -something " __ __ __ __ \\ // \\ // \\ // \\ // \\// \\// " 印
echo -something "
__ __ __ __
\\ // \\ //
\\ // \\ //
\\// \\//
"
印刷
__ __ __ __
\\ // \\ //
\\ // \\ //
\\// \\//
正是这样。单引号是你的朋友;反斜杠只是单引号字符串中的一个普通字符。除了单引号本身,其他字符也是如此
echo '
__ __ __ __
\\ // \\ //
\\ // \\ //
\\// \\//
'
如果在单引号输出中需要单引号,则必须编写序列'\''
以获得单引号:
echo '"single quotes" ('\'') are harder than "backslashes" (\)'
其中,我使用了双引号和反斜杠,使字符串更难使用双引号。但是,您也可以编写:
echo "\"single quotes\" (') are harder than \"backslashes\" (\\)"
这在Mac OS X上不起作用。在Mac上你需要
printf%s'…'
@asmaier:什么在哪个版本的macOS上不起作用,你使用的是哪个shell?最后两个命令都产生“单引号”(')比在我的Mac上使用Bash(刚刚用macOS Mojave 10.14.6测试过)产生的“反斜杠”(\)
更难。第一个版本也会产生我期望的输出。您是否可能使用macOS Catalina和zsh
?我忘记了在大约4年半前写这篇文章时应用了哪个版本-但那时我也会使用Bash。我希望它能与任何兼容POSIX的shell(或或多或少兼容的shell)一起工作。它可能不适用于C外壳衍生产品(例如tcsh
)。在您的第一个命令中,Mac上的echo不会返回双反斜杠,而是生成一个反斜杠。奇怪。在我的Mac上,我按照POSIX的要求获得了双反斜杠。您还没有确定您使用的是哪个版本的macOS,也没有确定使用的是哪个shell。在您像我一样确定这些版本之前,您的说法是没有根据的,并且是矛盾的从我在MacBook Pro.YMMV上看到的情况来看,我没有意识到使用任何奇怪的设置来修改Bash的行为。如果运行shopt-s
,xpg\u echo
是否显示为on
?使用zsh
(zsh 5.3(x86\u 64-apple-darwin18.0)在Mac上,我遇到了echo
的问题。但是你是对的,使用bash
时不会发生这种情况。