2017-02-01 11 views
1

この2行コマンドパイプラインの出力をテストする方法を

function some { 
     ## myFunc(true) is just a pattern 
     local isEnabled="grep myFunc(true) $indexFile | grep true" 
     if [ -z $($isEnabled) ]; then ... fi 
    } 

は私に: binary operator expected

を与えるが、私はパイプ記号|を削除すると、それはパイプが実行されているとのコマンドを作る方法を、働きますか?私は使用していますsh

+0

'myFunc(true)'はパターンまたは関数呼び出しですか? – codeforester

+0

それは単なるパターンです –

+1

文字列にコードを格納する際の注意点については、[BashFAQ#50](http://mywiki.wooledge.org/BashFAQ/050)を参照してください。 –

答えて

1

$($isEnabled)は何も展開されておらず、[ -z ]に引数が必要なので、このエラーが発生しています。

  • ()は特別な意味
  • を持っているので、あなたがshのためのあなたのコードを書き換えることができ、同じ問題

を防ぐために、二重引用符で$indexFileを囲むために優れている単一または二重引用符でmyFunc(true)を配置する必要があり

:として

function some { 
    local isEnabled=$(grep 'myFunc(true)' "$indexFile" | grep true) 
    if [ -z "$isEnabled" ]; then 
    : your logic here 
    fi 
} 

あるいは、より直接的に

function some { 
    # just interested in the presence or absence of a pattern 
    # irrespective of the matching line(s) 
    if grep 'myFunc(true)' "$indexFile" | grep -q true; then 
    : your logic here 
    fi 
} 

あるいは、バッシュで[[ ]]を使用します。

function some { 
    local isEnabled=$(grep 'myFunc(true)' "$indexFile" | grep true) 
    if [[ $isEnabled ]]; then 
    : your logic here 
    fi 
} 
  • [[ $var ]][[ -z $var ]]または[[ -n $var ]]と同じくらい良いです。バッシュは、任意の単語分割またはワイルドカード拡張問題なく拡張を扱う - $var限りは、長さ> 0

  • に引用符で[[ ]]内の変数を封入する必要がないように、それは真と評価されます。

関連する問題