Предположим, у меня есть такой код:
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
сделать то, что вам нужно.