私はBashスクリプトを初めて使用しますが、これは私にとって困惑しています。 ASCII artをプロジェクトに追加していますが、特定の文字をエスケープする方法がわからないようです。次のコードが動作するように手伝ってくださいませんか?
エラーを修正するためにエスケープ文字としてスラッシュを追加しようとすると、そのスラッシュも実行時にコンソールに印刷されてしまいました。これは画像を台無しにします。私が間違っていることを理解していないので、誰かが私に正しい方法を見せてくれることを期待して、以下のコードを投稿しました。お願いします?混乱を防ぐために引用符を削除しました。
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 ()`
Bashの引用符は重要な構文要素であり、乱雑ではありません。ただし、ASCII artを印刷するには、適切な引用とエスケープの手間を省いて、here document
:
cat << "EOF"
_,.
,` -.)
'( _/'-\\-.
/,|`--._,-^| ,
\_| |`-._/|| ,'|
| `-, / | / /
| || | / /
`r-._||/ __ / /
__,-<_ )`-/ `./ /
' \ `---' \ / /
| |./ /
/ // /
\_/' \ |/ /
| | _,^-'/ /
| , `` (\/ /_
\,.->._ \X-=/^
( / `-._//^`
`Y-.____(__}
| {__)
()`
EOF
ここで引用符を削除しないようにしてください。オプションではありません。
echo
は一連の引数を取ります。入力した場合
echo foo bar
echo
コマンドは、2つの引数、"foo"
および"bar"
、および単語間のスペースは破棄されます。
しようとしていることのために、おそらくecho
が各行に対して1つの引数を正確に受け取るようにする必要があります。 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 $' ()`'
(追加されたバックスラッシュはスクリプト内の画像を台無しにしますが、出力では正しく表示されます。)
この場合、 他の人の答え は、特殊文字をエスケープする必要がないため、より良いアプローチですが、この手法は出力を小さくするのに役立ちます。
または、生の画像をファイルに挿入し、cat
を標準出力に出力することもできます。