When using a non-default IFS (a default IFS would trim them), a single empty trailing field is ignored for read -a.
IFS=: read -rd '' -a arr < <(printf %s ':foo:bar:'); printf '<%s> ' "${arr[@]}"; echo <> <foo> <bar> I would expect the output to be: <> <foo> <bar> <>