2009-10-12
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' とかもちゃんと出力できないことに注意).
皆さんどうやってるんでしょうか.