\
é usado várias vezes:
- para a forma
'...'
de substituição de comando. Melhor é usar$(...)
. - para escapar de caracteres como
$
,'
e\
entre aspas duplas. Melhor usar aspas simples em vez disso. - para escapar de
\
no argumento de formato deprintf
- para introduzir essa sequência de
\xHH
no argumento de formato do outroprintf
(embora não padrão).
Por isso, deve ser:
printf 'printf "\\\\x%x" 255 255 255 0'
printf 'printf '\\x%x' 255 255 255 0'
printf $(printf '\x%x' 255 255 255 0)
Ou seja, você precisa transmitir \
para a direita printf
para gerar \
, mas com '...'
, você precisará escapar de cada \
com \
e isso novamente por "..."
.
Isso ainda está invocando o operador split + glob que não queremos aqui. Então:
printf "$(printf '\x%x' 255 255 255 0)"
Ou portavelmente:
printf "$(printf '\%o' 255 255 255 0)"
Com algumas implementações de awk
(nem todas com o trabalho com 0):
LC_ALL=C awk 'BEGIN{printf "%c%c%c%c", 255, 255, 255, 0}'
com perl
:
perl -e 'print pack "C*", @ARGV' 255 255 255 0
zsh
alternativa que evita o bifurcação de um subshell:
(){setopt localoptions nomultibyte; printf %s ${(#)@}} 255 255 255 0
bash
alternativa que evita bifurcar um subshell (também funciona em versões recentes de zsh
):
printf -v x '\%o' 255 255 255 0
printf "$x"