やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

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 進数で 03)。
      \xHH   16 進値が HH である 8 ビット文字 (16 進で 12)。
      \uHHHH 16 進値が HHHH であるユニコード (ISO/IEC 10646) 文字 (1614)。
      \UHHHHHHHH
             16 進値が HHHHHHHH であるユニコード (ISO/IEC 10646) 文字 (1618)

 べつにおかしな点はない。

所感

 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