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 の使い方のヘルプを表示させるエイリアスが作れた (笑)。