On Wed, May 18, 2011 at 02:10:39PM +0200, Rafaël Fourquet wrote: > If a line containing the '\0' is read into a variable, the content > of this variable does not contain the part after the '\0' character. > > Repeat-By: > echo -e 'a\0b' | (read f; echo $f) > > The output is 'a', and '\0b' is stripped.
Bash stores strings the same way C does. NUL marks the end of a string. So, even if f does contain a\0b, any attempt to retrieve the value of f is going to stop at the NUL byte. If you want to handle a stream of NUL-delimited strings in bash, the best approach is to use read -d '', thus: imadev:~$ printf '%s\0' one two three | while read -r -d '' s; do echo "<$s>"; done <one> <two> <three> read -d '' means "stop at NUL, instead of stopping at newline".