我是 Unix 新手。我有一个要求,我必须将 find 语句的输出放在数组中,因为稍后在脚本中我必须逐行使用输出行。我的 find 语句将根据条件检索目录的位置。
以下是查找语句:
find blah -mindepth 3 -maxdepth 3 -type d -regex ".*/V[0-9]+/wsdls+"
答案1
你可以这样做:
array=( $(find blah -mindepth 3 -maxdepth 3 -type d -regex ".*/V[0-9]+/wsdls+") )
# loop over it
for i in ${array[@]}
do
echo $i
done
# or in a while loop
i=0;
while [ $i -lt ${#array[@]} ]
do
echo $i: ${array[$i]}
((i++))
done
答案2
stackoverflow 上的这个答案有所有细节和一些替代方案。但本质上,一个可靠的方法是:
array=()
while IFS= read -r -d $'\0'; do
array+=("$REPLY")
done < <(find Where What... -print0)
使用的-print0
输出find
和空字节作为分隔符可以避免read
由带有空格或更糟糕的文件名造成的所有陷阱。
要迭代数组中的文件名,请使用引号将数组引起来:
for file in "${array[@]}"; do
echo "$file"
done