Direto ao ponto.
Tudo depende do valor LANG ou LC_ALL definido na sua sessão de terminal quando você executa tr . O Linux os definiu como C , enquanto o macOS definiu como en_US.UTF-8 . É claro que en_US poderia ser algum outro idioma local como en_UK (inglês do Reino Unido), mas o ponto é a configuração [something].UTF-8 em vez de ASCII simples via C é o que está causando isso.
Mais detalhes.
Parece que o tr no macOS está convertendo o 0xff no equivalente a UTF8 de c3bf quando Obtém em vez do puro ASCII 0xff . Isso é explicado aqui no este tópico de suporte da comunidade da Apple :
Linux doesn't handle Unicode in the Terminal like the Mac does. If you set the "LANG" environment variable to "C" (as it probably is on Linux), it will work. Otherwise, all those high-order bits are going to get interpreted as Unicode characters.
E usando esse LANG tip funciona! Apenas faça o seguinte; testado pessoalmente por mim só agora no macOS 10.13.6 (High Sierra).
Primeiro, tome nota de como o valor LANG existente é assim:
echo $LANG
A saída que vejo é:
en_US.UTF-8
Agora defina o valor LANG como C da seguinte forma:
LANG=C
E execute o comando novamente:
dd if=/dev/zero ibs=1k count=100 | tr "hexdump -C paddedFile.bin
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00019000
0" "7" >paddedFile.bin
Agora, os valores de hexdump devem ficar assim:
LANG=en_US.UTF-8
Para redefinir o valor LANG , feche a sessão do terminal ou apenas execute este comando:
dd if=/dev/zero ibs=1k count=100 | LANG=C tr "dd if=/dev/zero ibs=1k count=100 | LC_ALL=C tr "echo $LANG
0" "7" >paddedFile.bin
0" "7" >paddedFile.bin
Ou - como apontado nos comentários - você pode definir o valor LANG diretamente nas opções da linha de comando antes de chamar tr da seguinte forma:
en_US.UTF-8
E você ainda pode usar LC_ALL em vez de LANG porque LANG é derivado de LC_ALL assim:
LANG=C