Bash
從 find 命令引用 bash for 循環中的項目
假設我有這個程式碼:
for i in $(find * -type f -name "*.txt"); do # echo [element by it's index] done
如果可能,我如何通過索引訪問元素?
你的命令
$(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
可以完成您需要完成的工作。