No bash, echo é uma função interna, então você está obtendo esse comportamento. Em sh não é um builtin . Parece que o sh usa seu comando "echo" embutido, que é diferente.
Portanto, tente usar /bin/echo em vez de sem o /bin/ .
Estou escrevendo um script de shell que anexa conteúdo binário a um arquivo. Eu tentei usar este comando:
echo -en '\x61\x62\x63..' >> /tmp/myfile
mas isso causou a seguinte saída:
-en \x61\x62\x63..
Existe alguma maneira de acrescentar o conteúdo a um arquivo em vez de ter que remover todo o conteúdo de cada vez?
Nota
Estou tentando fazer isso em um sistema que somente tem /bin/sh , este comando funciona bem com bash , mas não ao usar o shell padrão.
Se quiser manter a portabilidade, não é possível usar echo ou printf , ambos tratam as seqüências de escape \xXX não especificadas como POSIX definidas.
Mesmo no sistema GNU, o comportamento de echo , seja interno ou /bin/echo , pode ser alterado. Você pode tentar:
$ POSIXLY_CORRECT=1 /bin/echo -en '\x61'
-en \x61
$ env BASHOPTS=xpg_echo POSIXLY_CORRECT=1 bash -c "echo -en '\x61'"
-en a
(Você deve ler este para obter mais detalhes).
Com a caixa de ferramentas POSIX padrão, você pode usar awk :
$ awk 'BEGIN{printf "%c%c%c..", 97, 98, 99}'
abc..