概要

Bashのechoコマンドで-nをオプションとして解釈せずに文字列としてそのまま出力する方法を試したので紹介します。

問題点

下記のようにコマンドを実行すると-nはオプションとして解釈されて、 結果としては何も出力されません。

$ echo "-n"
# 何も出力されない

Bashでは--をつけると「これ以降はオプションではない」ことを意味するらしいですが、 どうやらechoではこれは使えないようです。

$ echo -- "-n"
-- -n

解決策

たとえば-nの前に半角スペースを入れて" -n"とすると文字列として解釈されます。

$ echo " -n"
 -n

しかしこれだと当然のことながら半角スペースも一緒に出力されてしまうので、 同じ要領で\0-nにするとよさそうです。 \0はNULLのエスケープ文字です。 また、エスケープ文字を解釈するために-eをつけます。

$ echo -e "\0-n"
-n

注意点として実行環境によっては\0の挙動が変わるかもしれません。

以上です。