Verwenden Sie eine richtige Process-Substitution Syntax Schleife über Dateien, und Sie nicht eine Funktion benötigen, wenn Sie eine bestimmte Aktion auf jedem der Dateien von find
Ausgang zu tun suchen, nur tun
#!/bin/bash
while IFS= read -r file
do
echo "$file"
# Your other actions on "$file" go here
done < <(find . -type f -name "hello")
(oder) Wenn Sie Angst haben, Sonderzeichen in Dateinamen wie Leerzeichen oder Metazeichen zu verwenden, verwenden Sie die -print0
Option, wenn sie unterstützt wird (GNU findutils
Paket), um die Dateien auf \0
zu trennen und zu lesen es zurück mit dem gleichen De-Limiter.
while IFS= read -r -d '' file
do
echo "$file"
# Your other actions on "$file" go here
done < <(find . -type f -name "hello" -print0)
ich nur einfach tun NICHT empfehlen diesen Weg mit der Funktion, aber man kann so etwas wie zu tun,
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")"
(oder) mehr-einfach nur tun,
function findRead() {
for file in "$1"
do
echo "$file"
done
}
findRead "$(find . -type f -name "hello")"
Der Schlüssel hier ist, die $(..)
Befehl-Ersetzung, die die Ausgabe von find
zurückgibt, double-quote, um das new-line char zu erhalten Diese werden dann Ihrer benutzerdefinierten Funktion zugeführt.
Gibt es einen bestimmten Grund, warum Sie die Funktion verwenden sollten? Ich kann hier keine Verwendung sehen – Inian
Die schnelle und dreckige Lösung in Ihrem Fall wäre, die $ 1 in der Funktion durch $ @ –