Existem dois problemas aqui. Primeiro, se você quiser substituir ;
por \;
, será necessário escapar do \
. Lembre-se que \
é um caractere especial, ele é usado para escapar de coisas (isto é, presumivelmente, precisamente porque você deseja adicioná-lo antes do ;
). Para usá-lo literalmente, em uma substituição, você precisa escapar também:
$ variable='1;2;3;4'
$ echo "${variable//;/\;}" ## fails
1;2;3;4
$ echo "${variable//;/\;}" ## works
1\;2\;3\;4
A próxima questão é que, como apontou Cuonglm, o cron roda tudo com /bin/sh
. Dependendo do seu sistema, isso pode ser um bash rodando no modo de compatibilidade sh, ou outro shell mínimo ( dash
em sistemas baseados no Debian) ou até mesmo o próprio shell de bourne. Portanto, é bem provável que a construção ${var//foo/bar}
não funcione. Por exemplo, em dash
:
$ variable='1;2;3;4'
$ echo "${variable//;/\;}"
dash: 2: Bad substitution
No entanto, se tudo o que você deseja é imprimir uma string salva em uma variável em um arquivo, isso deve sempre funcionar:
variable='1;2;3;4'
printf '%s\n' "$variable" > file