![如何避免 bc 输出换行](https://linux22.com/image/111635/%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%20bc%20%E8%BE%93%E5%87%BA%E6%8D%A2%E8%A1%8C.png)
我在 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=0
(DC_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 字节)。