假设我有这样的代码:
for i in $(find * -type f -name "*.txt"); do
# echo [element by it's index]
done
如果可能的话,如何通过索引访问元素?
答案1
你的命令
$(find * -type f -name "*.txt")
将返回一个(空格分隔的)bash 列表,而不是数组,因此您无法真正以“目标”方式访问各个元素。
要将其转换为 bash 数组,请使用
filearray=( $(find * -type f -name "*.txt") )
(注意空格!)
然后,您可以访问各个条目,如下所示
for ((i=0; i<n; i++))
do
file="${filarray[$i]}"
<whatever operation on the file>
done
可以通过以下方式检索条目数
n="${#filearray[@]}"
但请注意那个这个仅有的如果您的文件名不包含特殊字符(特别是空格),则可以使用,因此,再一次,不建议解析ls
or的输出find
。就您而言,我建议您查看该-exec
选项是否find
可以完成您需要完成的任务。