2017-01-25 15 views
1

私は私のように呼び出すことをしようとしていますカスタムbashのテスト機能検索結果をカスタムbash関数に渡しますか?

main() { 
    list=$1 
    for i in ${list}; do 
     echo $i 
    done 
} 

あります

main `find . -name hello` 

それが唯一のリストに渡された最初のファイルをエコーされています。 find . -name helloの本来の出力は、どのように私は、全体のリストが渡されたことを確認することができます

./world1/hello 
./world2/hello 
./world3/hello 
./world4/hello 
./world5/hello 
./world6/hello 
./world7/hello 
./world8/hello 

のですか?

ありがとうございます!あなたはfind出力からのファイルのそれぞれに特定のアクションを実行するために探している場合

+0

functionを使用する特別な理由はありますか?私はここでは使用しないことができます – Inian

+0

あなたのケースでは、迅速かつ汚れた修正は、$ @ –

答えて

1

使用するファイルをループする際の正しいProcess-Substitution構文、そしてあなただけで行う、機能を必要としない

#!/bin/bash 

while IFS= read -r file 
do 
    echo "$file" 
    # Your other actions on "$file" go here 
done < <(find . -type f -name "hello") 

(または)ファイル名に空白や任意のメタ文字のような特殊文字があることを恐れている場合は、オプションがサポートされていれば(GNU findutilsパッケージ)、\0デリータと読み取りでファイルを区切ります同じデリミタで戻ってきます。

while IFS= read -r -d '' file 
do 
    echo "$file" 
    # Your other actions on "$file" go here 
done < <(find . -type f -name "hello" -print0) 

私はただ単に行うませ、関数にこのウェイを使用することをお勧めしますが、あなたのような何かを行うことができます

function findRead() { 
    while IFS= read -r file 
    do 
     echo "$file" 
     # Your other actions on "$file" go here 
    done <<<"$1"  
} 

findRead "$(find . -type f -name "hello")" 

(または)より、単純にやる、

function findRead() {  
    for file in "$1" 
    do 
     echo "$file" 
    done 
} 

findRead "$(find . -type f -name "hello")" 

ここでのキーは、の出力を戻すコマンド置換を$(..)に二重引用符で括って、改行文字を保持することですあなたのカスタム関数に供給されます。

+0

で関数の$ 1を交換することになります!私はこの権利を実行しているかどうかはよく分かりませんが、私は試しました:main(){ IFS = read -r file do echo "$ file" # "$ file"のあなたの他のアクションはここにあります 完了<<($ 1) } メイン 'find。 を呼び出します。 "fooname" OUTCAR "'それは動作しませんでした – lenzinho

+0

@ lenzinho:なぜあなたは再び関数を使用していますか?そういう意味では意味がありません。私が行ったのと同じ構文を使用してください。 – Inian

+0

私は将来何度もこの呼び出しを行い、状況に応じて異なるオプションを呼び出す柔軟性を持たせたいので、関数を使用したいと考えています – lenzinho

関連する問題