Je suis nouveau dans les scripts Bash, et cela me laisse perplexe. J'ajoute ASCII art à un projet, et je n'arrive pas à comprendre comment échapper à certains caractères. Quelqu'un pourrait-il m'aider à faire fonctionner le code suivant ci-dessous?
Chaque fois que j'essayais d'ajouter des barres obliques en tant que caractères d'échappement pour corriger les erreurs, les barres obliques se terminaient également par l'impression sur la console lors de l'exécution. Cela ruine l'image. Je ne comprends pas ce que je fais mal, j'ai donc posté le code ci-dessous dans l'espoir que quelqu'un prenne un moment pour me montrer le bon chemin. S'il vous plaît? J'ai supprimé les guillemets pour éviter plus d'encombrement.
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 ()`
Les citations en bash sont des éléments syntaxiques importants, pas un encombrement. Cependant, pour imprimer ASCII art, épargnez-vous la peine de citer et de vous échapper correctement et utilisez simplement un here document
:
cat << "EOF"
_,.
,` -.)
'( _/'-\\-.
/,|`--._,-^| ,
\_| |`-._/|| ,'|
| `-, / | / /
| || | / /
`r-._||/ __ / /
__,-<_ )`-/ `./ /
' \ `---' \ / /
| |./ /
/ // /
\_/' \ |/ /
| | _,^-'/ /
| , `` (\/ /_
\,.->._ \X-=/^
( / `-._//^`
`Y-.____(__}
| {__)
()`
EOF
Assurez-vous de ne pas supprimer les citations ici. Ils ne sont pas facultatifs.
echo
prend une série d'arguments. Si vous tapez
echo foo bar
la commande echo
obtient deux arguments, "foo"
et "bar"
, et l'espacement entre les mots est supprimé.
Pour ce que vous essayez de faire, vous voulez probablement que echo
reçoive exactement un argument pour chaque ligne. En bash, la façon la plus simple est probablement d'utiliser ce qu'on appelle "ANSI-C Quoting" . Dans chaque chaîne, chaque apostrophe '
et barre oblique inversée \
le caractère doit être échappé avec une barre oblique inverse.
Voici une version de votre script utilisant cette méthode:
#!/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 $' ()`'
(Les barres obliques inversées ajoutées gâchent l'image dans le script, mais elles apparaissent correctement en sortie.)
Dans ce cas, la réponse de cet autre gars est une meilleure approche, car elle évite d'avoir à échapper l'un des caractères spéciaux, mais cette technique pourrait être utile pour une sortie plus petite.
Ou vous pouvez simplement mettre l'image brute dans un fichier et cat
la sortie standard.