My two cents: I know `read` to be one of the worst way for reading
data, in term of performances. I know *shell* not to be able to
manage binary and mostly null bytes,
The most reliable way I use for parsing strings that contain
null bytes is mapfile (readarray):
$ printf %b\\0 winter spring 'summer\0200apple\0200banana\0200cherry' automn|
bash -c 'IFS= readarray -d "" -t arry;printf "<%q>\n" "${arry[@]}"'
<winter>
<spring>
<$'summer\200apple\200banana\200cherry'>
<automn>
or
$ printf 'FOO\0\315\0\226\0\0BAR'
bash -c 'IFS= readarray -d "" -t arry;printf "<%q>\n" "${arry[@]}"'
<FOO>
<$'\315'>
<$'\226'>
<''>
<BAR>
Le Mon, Apr 21, 2025 at 07:48:30AM +0100, Stephane Chazelas a écrit :
> $ printf '%b\0' winter spring 'summer\0200apple\0200banana\0200cherry' automn
> |
> ./bash -c 'while IFS= read -rd "" season; do LC_ALL=C printf "<%q>\n"
> "$season"; done'
> <winter>
> <spring>
> <summer>
> <apple>
> <banana>
> <cherry>
> <automn>
>
--
Félix Hauri - <[email protected]> - http://www.f-hauri.ch