Supongamos que tengo este código:
for i in $(find * -type f -name "*.txt"); do
# echo [element by it's index]
done
¿Cómo accedo, si es posible, a un elemento por su índice?
Respuesta1
tu comando
$(find * -type f -name "*.txt")
devolverá una lista bash (separada por espacios), no una matriz, por lo que realmente no se puede acceder a los elementos individuales de una manera "dirigida".
Para convertirlo en una matriz bash, use
filearray=( $(find * -type f -name "*.txt") )
(¡tenga en cuenta los espacios!)
Luego, puede acceder a las entradas individuales como en
for ((i=0; i<n; i++))
do
file="${filarray[$i]}"
<whatever operation on the file>
done
donde el número de entradas se puede recuperar a través de
n="${#filearray[@]}"
Tenga en cuenta sin embargoque estesolofunciona si los nombres de sus archivos no contienen caracteres especiales (en particular espacios) y, por lo tanto, una vez más,No se recomienda analizar la salida de ls
ofind
. En su caso, recomendaría ver si la -exec
opción de find
puede hacer lo que necesita lograr.