Просто обнаружил еще одну возможную проблему: если вы используете заглавный символ X , это происходит, когда я пытаюсь использовать его в bc:
X=3
(standard_in) 16: illegal character: X
(standard_in) 16: syntax error
Очевидно, что только строчные буквы являются переменными (со страницы руководства: входные числа могут содержать символы 0-9 и AF. (Примечание: они должны быть прописными. Строчные буквы являются именами переменных).
Поэтому было бы неплохо перейти на другой символ нижнего регистра (поскольку уже есть другой символ нижнего регистра x).
Я просто попытался несколько очень базового тестирования, по- видимому , с помощью print в bc делает его не печатать символ конца строки. Просто поместив переменную / число в собственную строку , выведите новую строку:
$ echo "x=5; print x; print 999; x; 15; print 15; 12345"|bc
59995
15
1512345
Итак, заменив свой print x"\n"; строка только с x; должно сработать?
И использование \n с печатью тоже должно сработать, возможно, у вас возникла проблема с цитированием ... когда я попытался отразить bc используя двойные двойные кавычки (определенно неправильно ;-) или двойные кавычки с одинарными кавычками \n s it терпит неудачу:
$ 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: '
Но используя одинарные кавычки для эха и двойные кавычки для \n s, это работает
$ echo 'x=5; print x; print 999; x; 15; print "15\n\n\n"; 12345'|bc
59995
15
15
12345
Таким образом, также заменяя вашу print x"\n"; строка с print "x\n"; должно работать тоже?
Информативная цитата из man bc:
распечатать список
Оператор печати (расширение) предоставляет другой метод вывода.
"Список" - это список строк и выражений, разделенных запятыми.
Каждая строка или выражение печатается в порядке списка. Завершающий перевод строки не печатается. Выражения оцениваются, их значение печатается и присваивается переменной last. Строки в операторе print выводятся на вывод и могут содержать специальные символы. Специальные символы начинаются с символа обратной косой черты (\). Специальные символы, распознаваемые bc: "a" (предупреждение или звонок), "b" (возврат на одну позицию), "f" (перевод формы), "n" (перевод строки), "r" (возврат каретки), "q" ( двойная кавычка), "t" (табуляция) и "\" (обратная косая черта). Любой другой символ после обратной косой черты будет проигнорирован.