Невозможно заставить искусство ASCII эхо-консоль
Я новичок в Bash сценариях, и это здесь просто озадачивает меня. Я добавляю искусство ASCII к проекту и не могу понять, как избежать определенных символов. Кто-нибудь, пожалуйста, помогите мне получить следующий код ниже, чтобы работать?
Всякий раз, когда я пытался добавить косые черты в качестве escape-символов для исправления ошибок, косые черты также завершили печать на консоль при выполнении. Это разрушает изображение. Я не понимаю, что я делаю неправильно, поэтому я разместил код ниже в надежде, что кто-то займет минуту, чтобы показать мне правильный путь. Пожалуйста?
Я удалил кавычки, чтобы избежать лишних помех.
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 ()`
Ответы
Ответ 1
Цитаты в bash являются важными синтаксическими элементами, а не беспорядками. Однако, чтобы печатать ASCII-искусство, избавьте себя от необходимости правильного цитирования и экранирования и просто используйте here document
:
cat << "EOF"
_,.
,` -.)
'( _/'-\\-.
/,|`--._,-^| ,
\_| |`-._/|| ,'|
| `-, / | / /
| || | / /
`r-._||/ __ / /
__,-<_ )`-/ `./ /
' \ `---' \ / /
| |./ /
/ // /
\_/' \ |/ /
| | _,^-'/ /
| , `` (\/ /_
\,.->._ \X-=/^
( / `-._//^`
`Y-.____(__}
| {__)
()`
EOF
Обязательно не удаляйте цитаты здесь. Они не являются обязательными.
Ответ 2
echo
принимает ряд аргументов. Если вы наберете
echo foo bar
команда echo
получает два аргумента, "foo"
и "bar"
, а расстояние между словами отбрасывается.
Для того, что вы пытаетесь сделать, вы, вероятно, хотите, чтобы echo
получал ровно один аргумент для каждой строки. В bash наиболее простым способом является использование так называемого "ANSI-C Quoting" . Внутри каждой строки каждый символ апострофа '
и обратного слэша \
должен быть экранирован с обратным слэшем.
Здесь версия вашего script с использованием этого метода:
#!/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 $' ()`'
(Добавленные обратные косые черты действительно испортили изображение в script, но он отображается правильно на выходе.)
В этом случае что ответ другого парня является лучшим подходом, поскольку он избегает необходимости избегать каких-либо специальных символов, но этот метод может быть полезен для меньший выход.
Или вы можете просто поместить необработанное изображение в файл и cat
его на стандартный вывод.