2011-07-07 6 views
4

私は解決しなければならないと思う問題にぶつかってきましたが、私の人生にとってはわかりません。本当に遅れているかもしれません。わからない。BASH:if文がコマンドと関数を実行する

私はシェルスクリプトを持っており、実行する必要があるif文があります。問題は、私が実際にif文の中でこのfindコマンドの一部を構築するために使用しているこのbashスクリプトの中に関数があることです。 [: too many argumentsのエラーを受け取らずに、私がどのようにして両方を行うことができるかを知りたい。

ここでは、現在のコードです:

 
if [ -n `find ./ `build_ext_names`` ];then 

私は本当に投稿するために必要なすべてのです。

function whateverItIsYouAreTryingToDo() { 
    local ext_names=$(build_ext_names) 
    local find_result=$(find ./ $ext_names) 
    if [ -n "$find_result" ] ; then 
     # Contents of if... 
    fi 
} 
+0

build_ext_namesの出力は何ですか? –

+0

'(-name filename.ext -o -name filename.otherext)'コードを出力します。基本的には、あなたが "許可"したい任意の拡張を入れることができる変数があります。そして、この関数は配列からこれを読み込み、それに必要なコードを構築します。これは、単一および複数のオプションを処理します。すごいかっこいい。 – drewrockshard

答えて

12

Michael Aaron Safyanは正しい考えを持っていますが、私はあなたがそれを分割場合、これは簡単ですでターンifstatement

+0

+1が合意しました。バッククッキングはうまく入れられません。 –

+0

これは完全に機能します。私は前にそれをしたようにそれが簡単だったことを知っていた、ちょうど覚えていない方法。 – drewrockshard

2

の内側にある、その内部build_ext_namesコマンドを見つけることを実行する方法を把握する必要があり直接の問題を解決するには、command substitutionの `` `command``の代わりに、より単純な$(command)構造体を使うことができます。

if [ -n "$(find ./ "$(build_ext_names)")" ]; then 
+0

これは私が調べるためのものです。私は将来このタイプの機能を完全に利用することができます。あなたが私の目を開けて嬉しいです(ローカルのbash変数)! – drewrockshard

関連する問題