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