有没有办法禁用bc
将长数字拆分为多行的功能,例如用于控制小数位的scale
变量?当然,我可以使用sed
,但有bc
种做法吗? http://www.gnu.org/software/bc/manual/html_mono/bc.html处的手册页仅指出每行的最大字符数为70。
以下是分割号码的示例:
bc -l <<< "scale = 100; a(1) * 4"
3.141592653589793238462643383279502884197169399375105820974944592307\
8164062862089986280348253421170676
答案 0 :(得分:3)
online bc man page与“环境变量”下的内容不符;我的版本(v1.06.95)日期为2006-06-11的手册页声称你可以设置BC_LINE_LENGTH = 0来禁用换行符,作为GNU特定的扩展名:
BC_LINE_LENGTH
这应该是一个整数,指定数字输出行中的字符数。这包括长数字的反斜杠和换行符。作为扩展,零值禁用多线功能。此变量的任何其他值小于3会将行长度设置为70。
您可以将BC_LINE_LENGTH设置为shell中的环境变量,或者在调用bc
之前将其设置为内联:
BC_LINE_LENGTH=0 bc -l <<< "scale = 100; a(1) * 4"
后记:经过一番调查后,虽然gnu.org的最新版本是v1.06,日期为2000-11-15,与上面发布的文档相符,但{{3}托管在alpha.gnu.org上。这些较新的版本包含BC_LINE_LENGTH = 0功能。
请参阅2004年创建并于2007年发布的new upstream versions (v1.06.94 and v1.06.95)(!)添加此扩展程序以及Debian-specific bug report and patch。看来这应该在Debian和Ubuntu的现代版本中可用,但可能不会出现在其他发行版中。
在较早的实现中,选择一个任意大数字(BC_LINE_LENGTH=5000
)可能会让你到达目的地。
答案 1 :(得分:2)
您可以使用read
(不带通常推荐的-r
标志)将值作为一条不间断的行抓取。
$ read pi <<< "$(bc -l <<< "scale = 100; a(1) * 4")"
$ echo $pi
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170676
或
read pi < <(bc -l <<< "scale = 100; a(1) * 4))
(当然,这不是bc
,但它比调用sed
更有效。)