Al querer programar con bash, quize hacer un gestor de archivos.
FILES=$(ls | grep .formato)
De esta forma puedo tener un arreglo de todos los archivos con cierta terminación. Pero, solo estan separadas por espacios, no puedo acceder a cada uno individualmente.
El problema que tienes es bastante común en bash, y simplemente es causado porque FILES=$(ls | grep .formato) no crea un array, sino una cadena de texto. Por eso echo ${FILES[0]} devuelve todos.
La forma, creo, más legible de que almacenes un array es mapfile:
mapfile -t FILES < <(ls | grep .formato)
Pruébalo. Después de ello deberías poder revisar el contenido del array individualmente con echo ${FILES[0]}, echo ${FILES[1]}, echo ${FILES[2]}…
También, como bien dice @jazzyUnix, no entiendo del todo bien por qué usas grep en este caso. Para empezar, te devolvería también un archivo denominado ejemplo.formato.txt. Con el propio ls puedes: