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