Seu echo "$a"
imprime "olá", depois volta para o início da linha (que é o que \r
faz), imprime "novamente", volta novamente, imprime "george", volta novamente e vai para a próxima linha ( \n
). É tudo perfeitamente normal, mas como chepner aponta, isso não tem nada a ver com o Bash: \r
e \n
são interpretados pelo terminal, não pelo Bash (é por isso que você obtém a saída completa quando canaliza o comando para od
).
Você pode ver isso melhor com
$ a=$(printf "hellooooo\r again,\rgeorge\r\n")
$ echo "$a"
pois isso deixará o fim do texto sobrescrito:
georgen,o
Você não pode realmente usar isso para ocultar comandos, apenas a saída deles (e somente se você pode sobrescrever com caracteres suficientes), a menos que use eval
conforme mostrado (mas usar eval
geralmente não é recomendado). Um truque mais perigoso é usar usando CSS para mascarar comandos destinados a serem copiados e colados de sites da Web.