无法让ASCII艺术回显到控制台

时间:2014-08-09 00:32:08

标签: bash scripting syntax-error ascii

我是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           ()`    

2 个答案:

答案 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将其放入标准输出。