echo "20+5"
从字面上使用会产生文本“ 20+5
”。
25
在这种情况下,我可以使用什么命令来获取数字总和?
另外,仅使用 bash 进行浮点运算的最简单方法是什么?例如,echo $((3224/3807.0))
打印0
:(.
我正在使用基本命令外壳(“命令行”)本身或通过使用命令行中可用的语言来寻找答案。
我时不时地需要在命令行环境中进行简单的算术运算。EG 给出以下输出:
Disk /dev/sdb: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 106MB 105MB fat32 hidden, diag
2 106MB 64.1GB 64.0GB ext4
3 64.1GB 192GB 128GB ext4
5 236GB 256GB 20.0GB linux-swap(v1)
Run Code Online (Sandbox Code Playgroud)
在命令行上计算分区 3 和 5 之间未分配空间大小的简单方法是什么?
bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
236-192 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试hex
直接使用进行计算bc
,我已经指定了比例。
echo 'scale=16;c06b1000-c06a5e78' | bc
Run Code Online (Sandbox Code Playgroud)
但我仍然得到一个零。可能有什么问题?
是否有任何其他的命令行计算器支持log
,n!
计算?至少bc
不能那样做,它告诉我解析错误
最好我可以使用脚本,例如 echo '5!' | program
我知道的唯一计算器是bc
. 我想添加1
到一个变量,并输出到另一个变量。
我nextnum
从文件中的计数字符串中得到了变量:
nextnum=`grep -o stringtocount file.tpl.php | wc -w`
Run Code Online (Sandbox Code Playgroud)
让我们说nextnum
价值是1
。添加时1
,它会变成2
. 为了计算,我运行:
rownum=`$nextnum+1 | bc`
Run Code Online (Sandbox Code Playgroud)
但有错误:
1+1: command not found
Run Code Online (Sandbox Code Playgroud)
我只是在计算部分失败了。我试过改变反引号,但仍然无效。我不知道如何计算变量并将其输出到另一个变量。
高,我需要测试我的任意精度计算器,并且bc
似乎是一个很好的比较标准,但是,bc
确实将每个乘法的结果截断为每个所涉及的操作数的最大比例。
有没有一种快速的方法来关闭它或自动将每个乘法的比例设置为因子的比例总和,以便它不会失去任何精度?
如果您对此有更优雅的解决方案,涉及除 之外的其他内容bc
,我将不胜感激您的分享。
例子:
$ bc <<< '1.5 * 1.5'
2.2
Run Code Online (Sandbox Code Playgroud)
真正的答案是 2.25。
如何将命令行计算器添加到我的 bash 中?我找到了一些,但他们都使用句号作为小数点,但我想让它像世界上大多数人一样使用逗号作为小数点,见图:
(来源维基百科)
我发现的那些(全部以句号作为小数点)如下,这些行必须放入您的~/.bashrc
文件中:
使用 bc,它的优点是可以计算出大得离谱的数字:
calc () {
bc -l <<< "$@"
}
Run Code Online (Sandbox Code Playgroud)使用 awk,您可以使用三角函数和其他函数的助记符名称,并且可以使用分数指数,并且可以通过两个字符**
而不是在某些难以键入的键盘上给出指数^
:
calc () {
awk "BEGIN { print $* ; }"
}
Run Code Online (Sandbox Code Playgroud)我无法理解手册页中给出的这个例子dc
:
$ dc
1 0:a 0Sa 2 0:a La 0;ap
1
Run Code Online (Sandbox Code Playgroud)
对我来说答案应该是 2 因为:
1 0:a
这里我们将 1 存储在 array 的第 0 个位置a
。
0Sa
现在我们将 0 压入 register 的堆栈a
。
2 0:a
现在我们再次将 2 存储在数组的第 0 个位置,a
从而覆盖先前存储在该位置的 1。
La
现在我们弹出存储在寄存器堆栈中的 0a
并将其推送到主堆栈。
0;a
现在我们再次将 0 推送到主堆栈,然后将其弹出以用作数组索引,因此我们将存储在数组第 0 个位置的 2 推a
送到主堆栈。
p
现在我们打印主堆栈的顶部,即 2。所以答案应该是 2。
我错过了什么?
PS- 我想dc
用作标签,但看起来它不存在,因此必须至少使用一个标签debian
(我的工作站操作系统)。