Angenommen, ich habe diesen Code:
for i in $(find * -type f -name "*.txt"); do
# echo [element by it's index]
done
Wie greife ich, falls möglich, auf ein Element über seinen Index zu?
Antwort1
Ihr Befehl
$(find * -type f -name "*.txt")
gibt eine (durch Leerzeichen getrennte) Bash-Liste zurück, kein Array, daher können Sie nicht wirklich „gezielt“ auf die einzelnen Elemente zugreifen.
Um es in ein Bash-Array zu konvertieren, verwenden Sie
filearray=( $(find * -type f -name "*.txt") )
(Beachten Sie die Leerzeichen!)
Anschließend können Sie die einzelnen Einträge aufrufen wie in
for ((i=0; i<n; i++))
do
file="${filarray[$i]}"
<whatever operation on the file>
done
Die Anzahl der Einträge kann abgefragt werden über
n="${#filearray[@]}"
Beachten Sie jedochdass diesenurfunktioniert, wenn Ihre Dateinamen keine Sonderzeichen (insbesondere Leerzeichen) enthalten und daher noch einmal,Das Parsen der Ausgabe von ls
oder find
wird nicht empfohlen. In Ihrem Fall würde ich empfehlen, zu prüfen, ob die -exec
Option das find
leistet, was Sie erreichen möchten.