Suponha que eu tenha este código:
for i in $(find * -type f -name "*.txt"); do
# echo [element by it's index]
done
Como acesso, se possível, um elemento pelo seu índice?
Responder1
Seu comando
$(find * -type f -name "*.txt")
retornará uma lista bash (separada por espaço), não uma matriz; portanto, você não pode realmente acessar os elementos individuais de uma maneira "direcionada".
Para convertê-lo em um array bash, use
filearray=( $(find * -type f -name "*.txt") )
(observe os espaços!)
Então, você pode acessar as entradas individuais como em
for ((i=0; i<n; i++))
do
file="${filarray[$i]}"
<whatever operation on the file>
done
onde o número de entradas pode ser recuperado via
n="${#filearray[@]}"
Observe, no entantoque issoapenasfunciona se os nomes dos seus arquivos não contiverem caracteres especiais (em espaço específico) e, portanto, mais uma vez,analisar a saída de ls
or find
não é recomendado. No seu caso, eu recomendaria ver se a -exec
opção find
pode fazer o que você precisa.