Bash Shellスクリプト配列の長さが1ずつ短縮されました。

Bash Shellスクリプト配列の長さが1ずつ短縮されました。

私のbashシェルスクリプトの配列の長さが1だけ減ったようです。テキストファイルの要素を配列に読み込んでいますが、11配列の長さが12

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

echo $count

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

echo $ArrayLength

このコードは以下を出力します。

11
12

これは11、読み取りが発生した後にカウントが増加し、読み取られた0--indicating 要素で始まるため、意味があります。11

ところで、これは12神秘的です。

以下はデータファイルです。

Ann
Bob
Cindy
Dean
Emily
Frank
Ginger
Hal
Ivy
Justin
Karen

(名前は1行に表示されますが、この記事ではそのようにフォーマットすることはできません。)

複数のユーティリティを使用して再確認しましたが、ファイルの末尾に空白行がなく、行に末尾のスペースがありません。

ベストアンサー1

最後の読み取りでは、より多くのデータが見つからない場合は空の文字列が割り当てられるため、項目数はデータより1より多くなります。使用を確認するにはprintf "'%s'\n" "${students[@]}"

おすすめ記事