echo '-ne' で何も表示されない
なぜ?
何も表示されない
echo '-ne' echo '-en' echo '-n'
見つけたのは偶然。こういうもんなの?
いろいろ試してみた
# なぜか何も表示されない echo "-ne" echo "-n" echo -ne # 想定内。末尾改行削除&アンエスケープ echo -n # 想定内。末尾改行削除 echo -en '-en' # なぜか改行だけ出た echo '-e' echo "-e" echo -e # 想定内。アンエスケープ(echo -e 'A\nB') echo -en -en # 表示される echo '-' echo 'n' echo 'na' echo 'nd' echo 'nf' echo -en '-ea'
何がどうして表示されないの? 「"echo '-ne'"」でググったけど出てこない。-
,e
,n
の文字を見るとなんとなくオプションっぽいけど、まさかね。クォートしてるんだから文字列だよね? ね?
オプション | 概要 |
---|---|
-n |
末尾の改行なし |
-e |
アンエスケープ(\n などを制御コードに変換する) |
どうでもいいことだけど気になる。私が知らないだけで何かとんでもない罠が潜んでいるやもしれぬ。Bashの闇は底なし。
$ man bash ... echo [-neE] [arg ...] arg を空白で区切って出力し、最後に改行を出力します。 終了ステータスは常に 0 です。 -n が指定された場合、最後の改行は出 力されません。 -e オプションを指定した場合、 以下に示す、バックスラッシュのエスケープ文字が解釈されるようになります。 -E オプションを指定すると、 デフォルトでこのようなエスケープ文字が解釈されるシステムであっても、 エスケープ文字が解釈 されないようになります。 xpg_echo シェルオプションを用いると、 echo がこれらのエスケープ文字を展開するかどうかの デ フォルト動作を動的に決定できます。 echo は -- をオプションの終わりと解釈しません。 echo は以下のエスケープシーケンスを 解釈します: \a 警告 (ベル) \b バックスペース \c 行末に改行を付けない \e \E エスケープ文字 \f フォームフィード \n 改行 \r 復帰 (carriage return) \t 水平タブ \v 垂直タブ \\ バックスラッシュ \0nnn 8 進値で nnn である 8 ビット文字 (8 進数で 0〜3 桁)。 \xHH 16 進値が HH である 8 ビット文字 (16 進で 1〜2 桁)。 \uHHHH 16 進値が HHHH であるユニコード (ISO/IEC 10646) 文字 (16 進 1〜4 桁)。 \UHHHHHHHH 16 進値が HHHHHHHH であるユニコード (ISO/IEC 10646) 文字 (16 進 1〜8 桁)。
べつにおかしな点はない。
所感
echo
怖い。
うろ覚えだが、これを試した2019-04-09頃にシステムアップデートしたとき、めずらしくカーネルも更新された。まさかバグ?
それとも私がなにか勘違いしてる?
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12
$ uname -a Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux