Jam*_*des 23 bash shell-script echo escape-characters here-document
我想在 bash 脚本完成后输出它。
/\_/\
( o.o )
> ^ <
Run Code Online (Sandbox Code Playgroud)
我已尝试以下但所有返回错误。
echo /\\_/\\\n\( o.o \)\n > ^ <
echo \/\\_\/\\\r\n( o.o )\r\n > ^ <
echo /\\_/\\\n\( o.o \)\n \> ^ <
Run Code Online (Sandbox Code Playgroud)
如何转义这些字符以便 bash 将它们呈现为字符串?
Kus*_*nda 41
在这种情况下,我将使用cat(引用的)此处文档:
cat <<'END_CAT'
/\_/\
( o.o )
> ^ <
END_CAT
Run Code Online (Sandbox Code Playgroud)
这是确保 ASCII 艺术按照预期方式输出的最佳方法,而不会受到 shell“妨碍”(扩展变量等、解释反斜杠转义序列或进行重定向、管道等)。
您还可以使用多行字符串printf:
printf '%s\n' ' /\_/\
( o.o )
> ^ <'
Run Code Online (Sandbox Code Playgroud)
请注意我们要输出的静态字符串周围使用单引号。我们使用单引号来确保 ASCII 字符不会被 shell 以任何方式解释。另请注意,我们输出的字符串是的第二个参数printf。第一个参数printf始终是单引号格式化字符串,其中反斜杠远非不活动。
或者多个字符串printf(每行一个):
printf '%s\n' ' /\_/\' '( o.o )' ' > ^ <'
Run Code Online (Sandbox Code Playgroud)
printf '%s\n' \
' /\_/\' \
'( o.o )' \
' > ^ <'
Run Code Online (Sandbox Code Playgroud)
或者,使用echo(但请参阅Why is printf better than echo?;基本上,根据 shell 及其当前设置,某些转义序列可能存在问题,可能无法很好地处理 ASCII 绘图),
echo ' /\_/\
( o.o )
> ^ <'
Run Code Online (Sandbox Code Playgroud)
但同样,我认为从此处文档输出它cat是最方便和直接的。
ilk*_*chu 16
用单''引号或双引号引起来"",以防止<>()被视为运算符。然后,如果您希望它在一行上,请在 Bash 中使用echo -e或$' ',将换行符标记为\n并用另一个反斜杠转义反斜杠。或者更确切地说,用于printf避免不同环境之间的差异问题echo。
所以:
$ printf ' /\\_/\\\n( o.o )\n > ^ <\n'
/\_/\
( o.o )
> ^ <
$ printf "%s\n" $' /\\_/\\\n( o.o )\n > ^ <'
/\_/\
( o.o )
> ^ <
Run Code Online (Sandbox Code Playgroud)
也可以看看:
| 归档时间: |
|
| 查看次数: |
7977 次 |
| 最近记录: |