vol*_*619 8 shell bash arithmetic
假设两个数字存储在两个不同的文件中,a.txt并且b.txt.
每个数字都足够大(超过 30 位),不支持bash.
我如何将它们添加到 shell 中?
Sté*_*las 12
假设它们是十进制数,你可以这样做:
paste -d + a.txt b.txt | bc
Run Code Online (Sandbox Code Playgroud)
请注意bc换行非常长的数字(超过 68 或 69 位,具体取决于实现)。使用 GNU bc,您可以通过将BC_LINE_LENGTH环境变量设置为 0来禁用它,例如:
paste -d + a.txt b.txt | BC_LINE_LENGTH=0 bc
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 10
诀窍是不要bash用来执行加法1。
首先,将每个数字读入一个单独的变量。这假设文件只包含一个数字而没有其他信息。
a="$(<a.txt)"
b="$(<b.txt)"
Run Code Online (Sandbox Code Playgroud)
然后用bc计算器得到结果:
bc <<<"$a + $b"
Run Code Online (Sandbox Code Playgroud)
bc 是一种“任意精度算术语言和计算器”。
将结果存储在变量中c:
c="$( bc <<<"$a + $b" )"
Run Code Online (Sandbox Code Playgroud)
如果<<<语法感觉很奇怪(它被称为“here-string”并且是对 POSIX shell 语法bash和其他一些shell 支持的扩展),您可以改为使用printf将添加内容发送到bc:
printf '%s + %s\n' "$a" "$b" | bc
Run Code Online (Sandbox Code Playgroud)
并c再次存储结果:
c="$( printf '%s + %s\n' "$a" "$b" | bc )"
Run Code Online (Sandbox Code Playgroud)
1 使用bash执行增加了两个非常大的数字将需要执行,在bash脚本,做例行的高精度计算。这是完全可行的,但既麻烦又不必要,因为每个 Unix 都bc已经以相对容易和可访问的方式为您提供此服务。
| 归档时间: |
|
| 查看次数: |
5428 次 |
| 最近记录: |