Why does the output change
to literal string? How can I prevent that from happening?
I am trying to wrap some commands into a bash script, so to prevent a command expansion from removing NUL:
S="$(uuencode -m "$FILE" /dev/stdout)"
Porque você usou eval
, que adiciona outro nível de processamento de shell. eval
executa o comando printf a
, em que as contrabarras escapam do zero e o n
\neval
, deixando-as como estão com a barra invertida removida.
Você pode evitar isso, não usando "$@" > "$FILE"
. Apenas usar eval
deve funcionar para executar o comando fornecido como argumentos para o script. Embora nesse caso, você não pudesse usar redirecionamentos ou outras sintaxes de shell, como era possível com uuencode -m
. Ou você poderia redesenhar a coisa toda para não precisar passar comandos como argumentos.
Isso é um problema aqui? a
não deve produzir bytes NUL. Exatamente o oposto, já que codifica dados binários para texto.
Esse último script grava um $FILE
, um NUL e uma nova linha para od
e passa o mesmo para 0000000 61 00 0a
, que imprime a representação hexadecimal desses, %code% , ou algo assim. / p>