我是Bash脚本的新手,这对我来说很困惑。我正在为项目添加ASCII艺术,似乎无法弄清楚如何逃避某些字符。有人请帮助我下面的代码工作吗?
每当我尝试添加斜杠作为转义字符来修复错误时,斜杠也会在执行时打印到控制台。这破坏了形象。我不明白我做错了什么,所以我发布了下面的代码,希望有人花一点时间向我展示正确的方法。请? 我删除了引号以防止更混乱。
echo -en "\E[31m"
echo
echo _,.
echo ,` -.)
echo '( _/'-\\-.
echo /,|`--._,-^| ,
echo \_| |`-._/|| ,'|
echo | `-, / | / /
echo | || | / /
echo `r-._||/ __ / /
echo __,-<_ )`-/ `./ /
echo ' \ `---' \ / /
echo | |./ /
echo / // /
echo \_/' \ |/ /
echo | | _,^-'/ /
echo | , `` (\/ /_
echo \,.->._ \X-=/^
echo ( / `-._//^`
echo `Y-.____(__}
echo | {__)
echo ()`
答案 0 :(得分:61)
bash中的引号是重要的句法元素,而不是混乱。但是,要打印ASCII艺术,请省去正确引用和转义的麻烦,只需使用here document
:
cat << "EOF"
_,.
,` -.)
'( _/'-\\-.
/,|`--._,-^| ,
\_| |`-._/|| ,'|
| `-, / | / /
| || | / /
`r-._||/ __ / /
__,-<_ )`-/ `./ /
' \ `---' \ / /
| |./ /
/ // /
\_/' \ |/ /
| | _,^-'/ /
| , `` (\/ /_
\,.->._ \X-=/^
( / `-._//^`
`Y-.____(__}
| {__)
()`
EOF
请务必不要在此处删除引号。它们不是可选的。
答案 1 :(得分:1)
echo
采取了一系列论点。如果您输入
echo foo bar
echo
命令获取两个参数"foo"
和"bar"
,并且单词之间的间距将被丢弃。
对于您要执行的操作,您可能希望echo
为每一行只接收一个参数。在bash中,最简单的方法可能就是使用所谓的"ANSI-C Quoting"。在每个字符串中,每个撇号'
和反斜杠\
字符都必须使用反斜杠进行转义。
以下是使用此方法的脚本版本:
#!/bin/bash
echo -n $'\E[31m'
echo $''
echo $' _,.'
echo $' ,` -.)'
echo $' \'( _/\'-\\\\-.'
echo $' /,|`--._,-^| ,'
echo $' \\_| |`-._/|| ,\'|'
echo $' | `-, / | / /'
echo $' | || | / /'
echo $' `r-._||/ __ / /'
echo $' __,-<_ )`-/ `./ /'
echo $'\' \\ `---\' \\ / /'
echo $' | |./ /'
echo $' / // /'
echo $'\\_/\' \\ |/ /'
echo $' | | _,^-\'/ /'
echo $' | , `` (\\/ /_'
echo $' \\,.->._ \\X-=/^'
echo $' ( / `-._//^`'
echo $' `Y-.____(__}'
echo $' | {__)'
echo $' ()`'
(添加的反斜杠确实会破坏脚本中的图片,但它在输出中显示正确。)
对于这种情况,that other guy's answer是一种更好的方法,因为它避免了转义任何特殊字符的需要,但这种技术对于较小的输出可能很有用。
或者您可以将原始图片放入文件中,并cat
将其放入标准输出。