Inside a Makefile I run a shell command which I want to pass a NULL byte as argument. The following attempt fails:
echo $(shell /bin/echo -n $$'\x00' | ruby -e "puts STDIN.read.inspect")
It generates:
echo "$\\x00"
Instead I expected:
echo "\u0000"
How do I properly escape such a NULL byte?
These uses of
echo
are totally non-portable. Useprintf
, it's much easier to use for anything other than the simplest strings, and much more portable.echo
disables interpretation of backslash escapes by default. You need to supply the-e
option to enable it.If anyone else came here looking how to escape a null via a shell command in ruby backticks:
Due to the execve(2) semantics it is not possible to pass a string containing a null byte as argument. Each argument string is terminated by null byte, therefore making it impossible to distinguish between the contained null byte and the end of the string.