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.