You can "output" $'\x00' just fine: $ printf '\0'
Note that -d $'\x00' is the same thing as -d '', for the reason I mentioned earlier. The argument to the -d option that "read" takes is a C-string. Understand the difference between *strings* and *streams*. A stream (standard output of printf '\0' or find . -print0) can contain any byte. A C-string can not contain NUL bytes. If you want strings with NUL bytes, you need Pascal-strings. You can *not*, however, output a NUL byte by using $'\x00' as an argument. Because arguments can't contain NUL bytes (they are C-strings). So outputting NUL a byte with this will *fail*: $ echo $'\x00' This will *also* fail: $ printf $'\x00' The first example I gave doesn't fail because the argument is not a NUL byte (empty), it is a backslash followed by a zero. printf sees this argument and understands you want it to expand that into a NUL byte, then emits it on its output STREAM. On 25 Nov 2009, at 14:35, Antonio Macchi wrote: > it sounds strange, beacuse > > $ find . -print0 | while read -d $'\x00'; do touch "$REPLY"; done > > works fine. > > > but if I try to "output" $'\x00', I can't. > >