bash は '-E' を echo できない(?)

echo '-E' とすると,'-E' が echo のオプション(エスケープ文字を解釈しない)として解釈され,echo できない.変数に代入したりしても同じ.しかたないので,C++ で引数を直接出力するプログラムを書いた.
(追記@Oct.14,2009)printf -- '-E' とするのがスマートな解決策のようです(コメント参照).id:atottoサンクス.

bash の実行例:

akihiko$ echo '-A'
-A
akihiko$ echo '-E'

akihiko$ echo "-E"

akihiko$ echo '\-E'
\-E
akihiko$ a='-A'
akihiko$ echo "$a"
-A
akihiko$ a='-E'
akihiko$ echo "$a"

のように,どうやっても '-E' を標準出力に出力できる気配がない.そこで,

decho.cpp :

#include <iostream>
using namespace std;
int main(int argc, char**argv)
{
  if(argc==1) return 0;
  cout<<argv[1];
  for(int i=2;i<argc;++i) {cout<<' '<<argv[i];}
  return 0;
}

コンパイルして decho というプログラムを作った.これで '-E' を問題なく出力(decho '-E')できる.ちなみに,decho は改行を出力しない.

用途

変数の内容を sed に送るときとか.
e.g.

  a='-E' # a にはほかの内容が入っているかもしれない
  decho "$a" | sed ...

ほかの方法は? 変数の内容を判定するとか(実は '-En' とか '-eE' とかもちゃんと出力できないことに注意).

皆さんどうやってるんでしょうか.