Строки C -в общем случае не могут содержать нулевые байты, а awk
в основном является своего рода интерпретатором C. Утилита POSIX, которая может печатать нулевые байты, должна быть явно упомянута в стандарте POSIX. printf
в awk
не является таким случаем.
Следующие случаи явно перечислены в POSIX:
echo 'x\0000y'
printf 'x\000y\n'
printf '%b\n' 'x\0000y'
все три команды печатают четыре символа в сертифицированной ОС с торговой маркой POSIX UNIX.
В ваших awk
примерах используется неопределенное поведение.