如何避免 bc 输出换行

如何避免 bc 输出换行

我在 GNU v.1.06 中有以下示例(我无法识别与行长度有关的限制):

v=$(bc -l <<<"scale=100;4*a(1)"); echo $v

返回:

3.141592653589793238462643383279502884197169399375105820974944592307\ 
8164062862089986280348253421170676

是否可以删除该函数输出中的反斜杠和回车符,或者我正在寻找不存在的东西?

答案1

至少在 GNU 中bc,您可以将环境变量设置BC_LINE_LENGTH为零值,例如

BC_LINE_LENGTH=0 bc -l <<<"scale=100;4*a(1)"

man bc

BC_LINE_LENGTH
       This should be an integer specifying the number of characters in
       an  output  line  for  numbers.  This includes the backslash and
       newline characters for long numbers.  As an extension, the value
       of  zero  disables  the  multi-line feature.  Any other value of
       this variable that is less than 3 sets the line length to 70.

答案2

使用 的 GNU 实现bc,从版本 1.07 开始,您可以使用BC_LINE_LENGTH=0DC_LINE_LENGTH=0对于 GNU dc)完全禁用换行,如前所述。对于旧版本的 GNU bc,您可以使用BC_LINE_LENGTH=9999(或任何大于您期望看到的数字最大大小的值)。

BC_LINE_LENGTH=9999 bc -l <<< 'scale=100;4*a(1)'

对于其他实现,您可以改为通过管道传输到:

perl -pe 's/\\\n\z//'

或者

sed -e :1 -e '/\\$/{N;s/\\\n//;b1' -e '}'

或者

awk '{if (sub(/\\$/, "")) printf "%s", $0; else print}'

或(高尔夫版):

awk '{ORS=sub(/\\$/,"")?"":RS};1'

但请注意,在某些系统上,文本实用程序不支持大于某个最大值的行(查看getconf LINE_MAX可能低至 1024 字节)。

相关内容