I don't believe any shell can currently read nul-delimited input into an array without looping. It's been suggested to add a delimiter to mapfile. It looks like mapfile uses zgetline() to wrap around calls to zread() and doesn't support any delimiter. read(1) on the other hand uses one of the zread functions directly depending upon what it's trying to do. I would guess there are some performance differences.
On Thu, Mar 27, 2014 at 12:15 PM, Pierre Gaston <pierre.gas...@gmail.com> wrote: > On Thu, Mar 27, 2014 at 5:53 PM, Mike Frysinger <vap...@gentoo.org> wrote: > >> On Thu 27 Mar 2014 08:01:45 Greg Wooledge wrote: >> > files=() >> > while IFS= read -r -d '' file; do >> > files+=("$file") >> > done < <(find . -iname '*.mp3' ! -iname '*abba*' -print0) >> >> i've seen this construct duplicated so many times :(. i wish we had a >> native >> option for it. maybe something like: >> read -A files -r -d '' < <(find . -iname '*.mp3' -print0) >> >> perhaps there is another shell out there that implements something that can >> replace that loop that bash can crib ? >> -mike > > > An option to change the delimiter for readarray/mapfile?