Você não pode armazenar um byte nulo em uma string porque o Bash usa strings no estilo C, que reservam o byte nulo para os terminadores. Então você precisa reescrever seu script para simplesmente canalizar a seqüência que contém o byte nulo sem que o Bash precise armazená-lo no meio. Por exemplo, você pode fazer isso:
printf "\x36\xc9\xda\x00\xb4" | hd
Observe, a propósito, que você não precisa de echo
; você pode usar o printf
do Bash para isso, muitas outras tarefas simples.
Ou, em vez de encadear, você pode usar um arquivo temporário:
printf "\x36\xc9\xda\x00\xb4" > /tmp/mysequence
hd /tmp/mysequence
Claro, isso tem o problema de que o arquivo /tmp/mysequence
já exista. E agora você precisa continuar criando arquivos temporários e salvando seus caminhos em strings.
Ou você pode evitar isso usando a substituição de processos:
hd <(printf "\x36\xc9\xda\x00\xb4")
O operador <(command)
cria um canal nomeado no sistema de arquivos, que receberá a saída de command
. hd
receberá, como seu primeiro argumento, o caminho para aquele pipe - que será aberto e lido quase como qualquer arquivo. Você pode ler mais sobre isso aqui: link .