Bash

從 find 命令引用 bash for 循環中的項目

  • March 9, 2020

假設我有這個程式碼:

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[@]}"

但是請注意,這在您的文件名不包含特殊字元(特別是空格)時才有效,因此再次解析lsor的輸出find不推薦。就您而言,我建議您查看-exec選項是否find可以完成您需要完成的工作。

引用自:https://unix.stackexchange.com/questions/571966