普段使っているzshで
echo '\e[0;31;47m CAUTION!! \e[0m'
みたいに書くと、色付き表示される。
これでヨシッ! と思ってうっかり
#!/bin/bash echo '\e[0;31;47m CAUTION!! \e[0m'
とshell scriptを書いてしまうと、これは意図した表示にならない。
macOSのbash echoにはバグがあるらしい
bash+windows terminalではこういう問題起きていない、ということだったので調べたところ、特にmacOSの標準のbashに問題があるようだった。
新しめのbashだったら -e
オプションをつけると問題なく表示されるっぽい。
printf
, 8進/16進数で回避する
こういった環境の差異にハマることないよう、そもそも echo
を使わずに printf
などで出力したり、 \e
ではなく \033
などで書くと回避できるようだ。
#!/bin/bash printf '\e[0;31;47m CAUTION!! \e[0m\n' echo -e '\033[0;31;47m CAUTION!! \033[0m'
これならおそらくどの環境でも大丈夫そう?