macOSのbashでエスケープシーケンスをechoするときは気をつける

普段使っているzsh

echo '\e[0;31;47m CAUTION!! \e[0m'

みたいに書くと、色付き表示される。

これでヨシッ! と思ってうっかり

#!/bin/bash

echo '\e[0;31;47m CAUTION!! \e[0m'

とshell scriptを書いてしまうと、これは意図した表示にならない。

macOSbash echoにはバグがあるらしい

bash+windows terminalではこういう問題起きていない、ということだったので調べたところ、特にmacOSの標準のbashに問題があるようだった。

unix.stackexchange.com

新しめの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'

これならおそらくどの環境でも大丈夫そう?