Acabei de encontrar outro possível problema: se você estiver usando um caractere capital X
, isso acontece quando tento usá-lo em bc
:
X=3
(standard_in) 16: illegal character: X
(standard_in) 16: syntax error
Aparentemente, apenas caracteres minúsculos são variáveis (da página man: Números de entrada podem conter os caracteres 0-9 e AF. (Nota: Eles devem ser maiúsculos. Letras minúsculas são nomes de variáveis ) .
Portanto, mudar para um caractere minúsculo diferente (já que já existe outro minúscula x
) seria uma boa ideia.
Eu apenas tentei alguns testes muito básicos, aparentemente usando print
em bc
faz não imprimir uma nova linha à direita. Basta colocar a variável / número em sua própria linha faz imprimir uma nova linha:
$ echo "x=5; print x; print 999; x; 15; print 15; 12345"|bc
59995
15
1512345
Então, substituir sua linha print x"\n";
por apenas x;
deve funcionar?
E, usar um \n
com impressão deve funcionar também, talvez você tenha um problema de citação ... quando tentei fazer eco para bc
usando aspas duplas (definitivamente errado ;-) ou com aspas duplas único citado \n
s falha:
$ echo "x=5; print x; print 999; x; 15; print "15\n\n\n"; 12345"|bc
(standard_in) 1: syntax error
$ echo "x=5; print x; print 999; x; 15; print '15\n\n\n'; 12345"|bc
(standard_in) 1: illegal character: '
(standard_in) 1: illegal character: \
(standard_in) 1: syntax error
(standard_in) 1: illegal character: \
(standard_in) 1: illegal character: \
(standard_in) 1: illegal character: '
Mas o uso de aspas simples para echo e aspas duplas para o \n
s funciona
$ echo 'x=5; print x; print 999; x; 15; print "15\n\n\n"; 12345'|bc
59995
15
15
12345
Então, também substituir sua linha print x"\n";
por print "x\n";
deve funcionar também?
Uma cotação informativa de man bc
:
print list
The print statement (an extension) provides another method of output. The "list" is a list of strings and expressions separated by commas. Each string or expression is printed in the order of the list. No terminating newline is printed. Expressions are evaluated and their value is printed and assigned to the variable last. Strings in the print statement are printed to the output and may contain special characters. Special characters start with the backslash character (\). The special characters recognized by bc are "a" (alert or bell), "b" (backspace), "f" (form feed), "n" (newline), "r" (carriage return), "q" (double quote), "t" (tab), and "\" (backslash). Any other character following the backslash will be ignored.