tr não pode fazer vários caracteres. Use um destes em vez disso:
-
sedecho "$line" | sed 's/ /\ /g'ou
sed 's/ /\ /g' <<< "$line" -
Perl
echo "$line" | perl -pe 's/ /\ /g'ou
perl -pe 's/ /\ /g'<<< "$line"O Perl também possui uma função bacana chamada
quotemeta, que pode escapar de todas as coisas estranhas em uma string:line='@!#$%^&*() _+"' perl -ne 'print quotemeta($_)' <<< $lineO texto acima será impresso
\@\!\#$\%\^\&\*\(\)\ _\+\"\ -
Você também pode usar
printfe%q:%q quote the argument in a way that can be reused as shell inputEntão, você poderia fazer
echo "$line" | printf "%q\n"Note que isso, como o
quotemetado Perl, irá escapar todos caracteres especiais, não apenas espaços.printf "%q\n" <<<$line -
Se você tem a linha em uma variável, você pode fazer isso diretamente no bash:
echo ${line// /\ }