Bash Shell Script Comprimento da matriz desativado por um

4

O comprimento de uma matriz no meu script de shell bash parece estar desativado em um. Eu tenho 11 elementos em um arquivo de texto que estou lendo em uma matriz, mas o tamanho da minha matriz parece ser 12 .

(( count = 0 ))
while read students[$count] ; do
    (( count++ ))
done < students.dat

echo $count

ArrayLength=$((${#students[@]}))

echo $ArrayLength

Este código gera:

11
12

O 11 faz sentido, pois o incremento de contagem ocorre depois que a leitura ocorre e começa com 0 - indicando 11 elementos lidos.

Mas o 12 é misterioso.

Aqui está o arquivo de dados:

Ann
Bob
Cindy
Dean
Emily
Frank
Ginger
Hal
Ivy
Justin
Karen

(os nomes aparecem em suas próprias linhas, mas não consegui formatá-lo dessa maneira)

Eu verifiquei duas vezes com vários utilitários e NÃO há uma linha em branco no final do arquivo, nem espaços à direita em nenhuma linha.

    
por Joe 05.03.2015 / 19:43

1 resposta

8

A última leitura que não conseguir encontrar mais dados atribuirá uma string vazia, portanto, o número de entradas é um a mais que seus dados. Para verificar isso, use printf "'%s'\n" "${students[@]}" .

    
por 05.03.2015 / 19:58

Tags