Can't get ASCII art to echo to console Can't get ASCII art to echo to console bash bash

Can't get ASCII art to echo to console


Quotes in bash are important syntactic elements, not clutter. However, to print ASCII art, save yourself the trouble of proper quoting and escaping and just use a here document:

cat << "EOF"       _,.     ,` -.)    '( _/'-\\-.                  /,|`--._,-^|            ,        \_| |`-._/||          ,'|            |  `-, / |         /  /           |     || |        /  /             `r-._||/   __   /  /    __,-<_     )`-/  `./  / '  \   `---'   \   /  /      |           |./  /       /           //  /      \_/' \         |/  /           |    |   _,^-'/  /                |    , ``  (\/  /_           \,.->._    \X-=/^            (  /   `-._//^`      `Y-.____(__}                   |     {__)                      ()`     EOF

Make sure not to remove the quotes here. They are not optional.


echo takes a series of arguments. If you type

echo  foo      bar

the echo command gets two arguments, "foo" and "bar", and the spacing between the words is discarded.

For what you're trying to do, you probably want echo to receive exactly one argument for each line. In bash, the easiest way is probably to use so-called "ANSI-C Quoting". Within each string, each apostrophe ' and backslash \ character has to be escaped with a backslash.

Here's a version of your script using this method:

#!/bin/bashecho -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 $'          ()`'

(The added backslashes do mess up the picture in the script, but it appears correctly on output.)

For this case, that other guy's answer is a better approach, since it avoids the need to escape any of the special characters, but this technique could be useful for smaller output.

Or you could just put the raw picture into a file and cat it to standard output.