The length of an array in my bash shell script appears to be off by one. I have 11
elements in a text file that I am reading in to an array, but my array length seems to be 12
.
(( count = 0 ))
while read students[$count] ; do
(( count++ ))
done < students.dat
echo $count
ArrayLength=$((${#students[@]}))
echo $ArrayLength
This code outputs:
11
12
The 11
makes sense since the count increment occurs after the read occurs and starts with 0
–indicating 11
elements read in.
But the 12
is mysterious.
Here is the data file:
Ann
Bob
Cindy
Dean
Emily
Frank
Ginger
Hal
Ivy
Justin
Karen
(names appear on their own lines, but I couldn't format it that way in this post)
I've double checked with multiple utilities and there is NOT a blank line at the end of the file, or any trailing spaces on any line.
Best Answer
The last read that fails to find more data will assign an empty string, so the number of entries is one more than your data. To check that use
printf "'%s'\n" "${students[@]}"
.