Просто обнаружил еще одну возможную проблему: если вы используете заглавный символ 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" (табуляция) и "\" (обратная косая черта). Любой другой символ после обратной косой черты будет проигнорирован.