Nenhuma ideia do porquê de estar lá, mas eis como desativá-lo com a implementação GNU de bc
:
echo '6^6^3' | BC_LINE_LENGTH=0 bc
BC_LINE_LENGTH
This should be an integer specifying the number of characters in an output line for numbers. This includes the backslash and newline characters for long numbers. As an
extension, the value of zero disables the multi-line feature. Any other value of this variable that is less than 3 sets the line length to 70.
Atualização:
Eu estava confuso sobre esta questão, eu pensei que era sobre as origens do recurso multi-line, parece estranho. De qualquer forma, a resposta real é que, se você não citar a variável, o shell fará dividir palavras antes de passar para echo
. A divisão de palavras é o processo em que uma expansão é dividida em 'palavras', dependendo do conteúdo de IFS
, essas 'palavras' tornam-se argumentos diferentes. No exemplo da questão, isso cria dois argumentos para ecoar, que echo
separa com um espaço (eu sabia disso antes de Stephane comentar, honestamente ...).
Para evitar que isso aconteça, apenas aspas duplas:
num=$(echo '6^6^3' | bc)
echo "$num"
Às vezes, isso é realmente útil como uma maneira de remover caracteres IFS de uma variável (embora printf %s
seja mais seguro para sequências arbitrárias). Por exemplo (em bash
):
$ var=$'spaces: newlines:\n\n\ntabs:\t\t\t end'
$ echo "$var"
spaces: newlines:
tabs: end
$ newvar="$(printf '%s ' $var)"
$ echo "$newvar"
spaces: newlines: tabs: end