Você pode fazer um documento aqui e usar cat
:
$ cat <<EOT >output
$a
EOT
$ wc -l output
40000
Eu não sei exatamente quão poderoso é o ash
do seu Busybox (é configurável), mas isso deve funcionar em qualquer lugar, mesmo sem nenhum built-in. Ele expande o valor da variável em um quase-arquivo, que é então dado a cat
, em vez de colocar o próprio valor na linha de comando.
Como você parece ter o literal "\n"
em sua string da qual deseja se livrar, também é possível usar a substituição de string durante a substituição do parâmetro. Isso pode ser configurado fora do ash
do Busybox, caso em que você terá que ir para sed
. Se você tem essa extensão (não POSIX), você pode usar ${var//\\n/$NEWLINE}
:
$ busybox ash
$ foo="x\ny\nz"
$ echo "$foo"
x\ny\nz
$ NEWLINE="
"
$ echo "${foo//\\n/$NEWLINE}"
x
y
z
Esta é a mesma sintaxe como Bash ; ${var/pattern/replacement}
, onde pattern
é global se começar com /
. Parece que o seu ash
foi muito configurado, então isso pode não estar lá. Nesse caso, você provavelmente terá que usar sed
, embora eu ache que o uso criterioso de IFS
e read
permita que você trabalhe em torno disso e reconstrua uma sequência correta.