我有自定义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
如何确保整个清单通过?
谢谢!
答案 0 :(得分:2)
使用正确的Process-Substitution语法循环文件,如果您希望对来自{的每个文件执行某项操作,则不需要一个功能{1}}输出,只需执行
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
我只是简单地 NOT 建议使用这种方式的功能,但你可以做类似的事情,
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")"
输出的$(..)
命令替换,以保留新行字符,然后将其输入到自定义函数中。