Получить GNU bc для печати символа новой строки

526
Melab

GNU bc очень нетрадиционный. Я не могу найти в Интернете ничего о том, как заставить его печатать символ новой строки. Я пытаюсь заставить его напечатать первые 16 шестнадцатеричных цифр синусов целых чисел от 1 до 30. Я ожидаю, что что-то вроде этого будет работать:

define mod(x, y) { oldscale=scale; scale=0; result=x%y; scale=oldscale; return result; } obase=16; x=1; while (x <= 30) { X=2^64*mod(s(x),1)-mod((2^64*mod(s(x),1)),1); print X"\n"; x=x+1; } 

Но это не так.

1

1 ответ на вопрос

1
Xen2050

Просто обнаружил еще одну возможную проблему: если вы используете заглавный Xсимвол, это происходит, когда я пытаюсь использовать его в bc:

X=3 (standard_in) 16: illegal character: X (standard_in) 16: syntax error 

Очевидно, что только строчные символы являются переменными (со страницы руководства: входные числа могут содержать символы 0-9 и AF. (Примечание: они должны быть заглавными буквами. Строчные буквы являются именами переменных ).

Так что переход на другой символ нижнего регистра (так как уже есть другой нижний регистр x) был бы хорошей идеей.


Я только что попробовал какое-то очень простое тестирование, по-видимому, используя printin, 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: ' 

Но используя одинарные кавычки для эха и двойные кавычки для \ns это работает

$ 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» ( двойная кавычка), "т" (вкладка) и "\" (обратная косая черта). Любой другой символ после обратной косой черты будет проигнорирован.

Похожие вопросы