2016-03-19 7 views
0

私はif-elseのケースで動作し、コマンドを内部で調整する関数を作りたいと思っています。 (実際に私が使いたい!)どのように強化することができます!変数としてのコマンドで?


function test_funct(){ 
cmd="grep thisword file" 
[[ $1 == not ]] && cmd="! $cmd" 
$cmd 
} 

test_funct not 

、これが立ち上がる: ./test:4行目:!:コマンドが

任意のアイデアが見つかりませんか?

+1

あなたの関数名には 'test'を避けるべきです。これはシェル組み込み関数です。 – SLePort

+0

単に '!'を使ってgrepコマンドを取り消すことはできません。一致の感覚を逆転させる 'grep -v'を使うべきです。 – SLePort

+0

ここでは終了コードを気にします。 ! grepは単語があれば1を返します。 それは私のために良いです。 だから、私は欲しい! grep。働く – aprin

答えて

1

!の解析は、コマンドライン解析プロセスの非常に早い段階で行われます。
確かに、「パラメータの拡張」「展開」の後には実行されません。

シェルによって否定演算子として認識されません。

あなたはそれがこのよう取り組んことがあります。

function test_funct(){ 
    cmd="grep thisword file" 
    [[ "$1" == "not" ]] && cmd="! $cmd" 
    eval "$cmd" 
} 

test_funct not 

しかし、evalのを使用しては、(あなたは一人ひとりのスクリプトを自分の内側evaled文字列の一部を設定していない限り)バグや問題を紹介するルートです。

この場合、cmdに「grep thisword file」という文字列が含まれていると、これが機能する場合があります。しかし、私はあなたの目標が、ユーザーからファイルを選択するか、検索された単語を変更する入力を受け入れることであることをはっきりと確認することができます。

しないでください。それは間違ったプレーンです。

+0

ゼブラに感謝、それはこのように動作します。 ;) – aprin

関連する問題