As barras invertidas escapam do próximo caractere; no seu caso, você escapou do espaço, quando o conteúdo de $a
se tornou: a b c
. Se você quer que o conteúdo de $ a tenha barras invertidas, então você precisa escapar:
a=a\\ b\\ c
ou
a='a\ b\ c'
Se $ a já contiver texto com espaços e você quiser salvá-lo em um arquivo, simplesmente:
printf "%q" "$a" > /tmp/a
Quando você executou:
printf "%q" $a > /tmp/a
Você disse ao printf para citar 3 split & pedaços de texto globbed: a
, b
e c
, que ele escapou obedientemente (sem fazer nada) antes de ser redirecionado para / tmp / a como abc
.
Faça uma boa leitura: Por que meu script de shell sufoca em espaço em branco ou outros caracteres especiais? o que está acontecendo.