Используйте соответствующий Process-Substitution синтаксис цикла над файлами, и вы не нужна функция, если вы хотите, чтобы выполнить определенное действие на каждом из файлов с find
выхода, просто сделать
#!/bin/bash
while IFS= read -r file
do
echo "$file"
# Your other actions on "$file" go here
done < <(find . -type f -name "hello")
(или), если вы боитесь иметь специальные символы в именах файлов, таких как пробел или любой метасимвол, используйте опцию -print0
, если она поддерживается (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")"
Ключом здесь является двойная кавычка командной строки $(..)
, которая возвращает вывод find
, чтобы сохранить новую строку charac которые затем передаются в пользовательскую функцию.
Есть ли конкретная причина, почему вы должны использовать функцию? Здесь я не вижу смысла – Inian
Быстрое и грязное исправление в вашем случае было бы заменить $ 1 в функции $ @ –