読者です 読者をやめる 読者になる 読者になる

echo コマンドで -e って表示させようとしてハマった話(と解決策)

最近 bash の complete コマンド(自動補完)がプチマイブームなので、自作のスクリプトのための補完とかをシコシコ作成しています。
そのうち、覚えたこととかをまとめてブログに書こうと目論んでいるところです。

で、例によって complete 用の関数とかを作ってる途中ですごく基本的なことでハマったのでここにメモしておきます。

それはタイトルにもあるとおり、echo コマンドを使って -e と表示させたかったのですが、-e は echo のオプション(エスケープシーケンス有効化)として解釈されてしまうので、

$ echo -e

を実行しても実際には何も表示されないという罠があります。

とりあえず思いつきで

$ echo -- -e

を試してみたのですが、これは効果なし。
echo のマニュアルをみても -- は存在しないようです。

仕方がないので

echo -n -
echo e

と2回にわけて実行して難を逃れたのですが、どうにもダサいですね。

ぐぐってみるにも -e って検索しづらい。。。

どうにか見つけた我らが StackOverflow のページでは、
bash - echo "-e" doesn't print anything - Stack Overflow

printf コマンドを使用していたり、あえてエスケープシーケンスを使って表示させてみたり、POSIXLY_CORRECT=1 という環境変数を設定してみたり、-e の前にゴミをつけてそれをパイプで sed に渡して消すっていう力技まで登場したりしていて、世界中でみんなが困っているんだなぁということがわかってなんかほっこりしました。

coreutils が使えるなら printf を使って表示するのがスマートなんではないでしょうか。


入門bash 第3版

入門bash 第3版


UNIXシェルスクリプトコマンドブック 第2版

UNIXシェルスクリプトコマンドブック 第2版


bashクックブック

bashクックブック


bash Manual&Reference

bash Manual&Reference