tr
não pode fazer vários caracteres. Use um destes em vez disso:
-
sed
echo "$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($_)' <<< $line
O texto acima será impresso
\@\!\#$\%\^\&\*\(\)\ _\+\"\
-
Você também pode usar
printf
e%q
:%q quote the argument in a way that can be reused as shell input
Então, você poderia fazer
echo "$line" | printf "%q\n"
Note que isso, como o
quotemeta
do 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// /\ }