${#files}
é o comprimento do primeiro elemento da matriz, ou seja, o comprimento de 1 red
. Qual é cinco.
No manual :
${#name[subscript]} expands to the length of ${name[subscript]}. If subscript is ‘@’ or ‘*’, the expansion is the number of elements in the array. [...]
Referencing an array variable without a subscript is equivalent to referencing with a subscript of 0.
Então, ${#files}
= ${#files[0]}
. Mas ${#files[@]}
ou ${#files[*]}
fornecem o número de elementos na matriz.
(Não tem nada a ver com o número de palavras, mas se você expandir ${files[*]}
sem aspas, você obterá a palavra usual dividindo todos os valores.)