\
используется там несколько раз:
`...`
. Лучше всего использовать $(...)
. $
, `
и \
внутри двойных кавычек. Вместо этого лучше использовать одинарные кавычки. \
в аргументе форматаprintf
\xHH
последовательность в аргумент формата другогоprintf
(не стандартного хотя ). Так и должно быть:
printf `printf "\\\\\\\\x%x" 255 255 255 0`
printf `printf '\\\\x%x' 255 255 255 0`
printf $(printf '\\x%x' 255 255 255 0)
То есть вам нужно передать \\
в самый правый printf
, чтобы он вывел \
, но с `...`
вам нужно экранировать каждый \
с \
и сделать что снова для "..."
.
Это по-прежнему вызов оператора split+glob, который нам здесь не нужен.Так:
printf "$(printf '\\x%x' 255 255 255 0)"
Или портативный:
printf "$(printf '\\%o' 255 255 255 0)"
С некоторыми awk
реализациями (не все работают с 0):
LC_ALL=C awk 'BEGIN{printf "%c%c%c%c", 255, 255, 255, 0}'
Сperl
:
perl -e 'print pack "C*", @ARGV' 255 255 255 0
zsh
альтернатива, позволяющая избежать разветвления подоболочки:
(){setopt localoptions nomultibyte; printf %s ${(#)@}} 255 255 255 0
bash
альтернатива, которая позволяет избежать разветвления подоболочки (также работает в последних версияхzsh
):
printf -v x '\\%o' 255 255 255 0
printf "$x"