如何将NULL字节作为参数转义为Makefile中的shell命令

joh*_*nes 2 shell null makefile escaping

在Makefile中我运行一个shell命令,我想传递一个NULL字节作为参数.以下尝试失败:

echo $(shell /bin/echo -n $$'\x00' | ruby -e "puts STDIN.read.inspect")
Run Code Online (Sandbox Code Playgroud)

它产生:

echo "$\\x00"
Run Code Online (Sandbox Code Playgroud)

相反,我期望:

echo "\u0000"
Run Code Online (Sandbox Code Playgroud)

如何正确地转义这样的NULL字节?

dev*_*ull 6

echo默认情况下禁用反斜杠转义的解释.您需要提供-e启用它的选项.

$ echo -ne "\x00" | ruby -e "puts STDIN.read.inspect"
"\u0000"
Run Code Online (Sandbox Code Playgroud)


joh*_*nes 6

由于 execve(2) 语义,不可能将包含空字节的字符串作为参数传递。每个参数字符串都以空字节结尾,因此无法区分包含的空字节和字符串的结尾。