bashスクリプトの完了後に出力したいです。
/\_/\
( o.o )
> ^ <
以下を試しましたが、すべてエラーを返しました。
echo /\\_/\\\n\( o.o \)\n > ^ <
echo \/\\_\/\\\r\n( o.o )\r\n > ^ <
echo /\\_/\\\n\( o.o \)\n \> ^ <
bashがその文字を文字列としてレンダリングするようにこの文字をエスケープするにはどうすればよいですか?
答え1
cat
この場合、ここで(引用された)文書を使用します。
cat <<'END_CAT'
/\_/\
( o.o )
> ^ <
END_CAT
これは、シェルの「妨害」(変数の拡張など、バックスラッシュのエスケープシーケンスの解釈やリダイレクト、パイピングなど)なしで、ASCIIアートを期待どおりに出力するのに最適な方法です。
複数行の文字列を使用することもできますprintf
。
printf '%s\n' ' /\_/\
( o.o )
> ^ <'
出力したい静的文字列の周りに一重引用符を使用することに注意してください。 ASCII文字がシェルによって何らかの方法で解釈されないように、単一引用符を使用します。また、私たちが出力する文字列は次のようになります。第二引数printf
最初の引数printf
は、常にバックスラッシュが無効になっていない一重引用符形式の文字列です。
または複数の文字列printf
(1行に1つずつ):
printf '%s\n' ' /\_/\' '( o.o )' ' > ^ <'
printf '%s\n' \
' /\_/\' \
'( o.o )' \
' > ^ <'
またはecho
(しかし参照なぜprintfがechoより優れているのですか?;デフォルトでは、シェルと現在の設定によっては、ASCII描画をうまく処理できない特定のエスケープシーケンスに問題がある可能性があります。
echo ' /\_/\
( o.o )
> ^ <'
しかし、もう一度言うが、ここで文書化するのがcat
最も便利で簡単だと思います。
答え2
''
演算子として扱われ""
ないように、一重引用符または二重引用符で囲みます。<>()
その後、1行に表示するには、Bashでまたはをecho -e
使用して$' '
改行を表示し、\n
別のバックスラッシュでバックスラッシュをエスケープします。または、むしろ、printf
異なる環境間の違いの問題を避けるためです。echo
だから:
$ printf ' /\\_/\\\n( o.o )\n > ^ <\n'
/\_/\
( o.o )
> ^ <
$ printf "%s\n" $' /\\_/\\\n( o.o )\n > ^ <'
/\_/\
( o.o )
> ^ <
また見なさい: