alias で echo する際のシングルクォートのエスケープ方法

alias コマンドで、echo コマンドのエイリアスを定義しようとしたのだが、echo 内にシングルクォートが書きたかった。

以前紹介したエスケープ方法でエスケープすればいいやと思ったのだが、alias コマンドはエイリアスにしたいコマンドをシングルクォートで囲む。つまり、単純にシングルクォートだけをエスケープしようと思うと、alias コマンドを途中で終えるようなことになってしまうのだ。

これを何とかする方法を導くまでの道のり。


まず、alias 抜きに普通に echo する場合は、シングルクォートは \' とエスケープすれば書ける。

次に、alias 内で単純にシングルクォートを書きたい場合は、'\'' と書く。' で文を一度終え、\' でクォートを書き、' で後続の文を再開するのだ。

では、alias で定義している echo コマンド内に含まれる文字列として、シングルクォートを正しく認識させるようにするにはどうしたらいいか。

すなわち、シングルクォートをエスケープするための「\」と、シングルクォート自体「'」を両方書いてやらないと、echo 文にシングルクォートを含めた alias を作れないので、「\'\''」と書くことで、echo 用の「\'」を表現するのだ。

# ということでこうなる。
alias grephelp='echo grep -r \'\''HOGE\'\'' ./'

これで、

$ grephelp
grep -r 'HOGE' ./

このような、grep の使い方のヘルプを表示させるエイリアスが作れた (笑)。