![默认情况下,bc 将任何字母字符解释为 9](https://linux22.com/image/230213/%E9%BB%98%E8%AE%A4%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8Cbc%20%E5%B0%86%E4%BB%BB%E4%BD%95%E5%AD%97%E6%AF%8D%E5%AD%97%E7%AC%A6%E8%A7%A3%E9%87%8A%E4%B8%BA%209.png)
系统:
- Ubuntu 22.04.3 LTS
- GNU bash,版本 5.1.16(1)-release (x86_64-pc-linux-gnu)
- 公元前 1.07.1
观察:
ibase
和均未obase
设置。
echo "A0" | bc
90
echo "B0" | bc
90
echo "X0" | bc
90
问题: 为什么默认情况下bc
将字母字符解释为9
s ?为什么这里不最好显示错误消息?
答案1
从man bc
GNU 系统(GNU bc
1.07 或更高版本):
一个简单的表达式只是一个常数。
bc
使用由变量 指定的当前输入基数将常量转换为内部十进制数ibase
。 (函数中有一个例外。) 的合法值为ibase
2 到 36。(大于 16 的基数是扩展。)
将超出此范围的值分配给ibase
将得到 2 或 36 的值。输入数字可能包含字符 0-9 和 AZ。 (注意:它们必须是大写字母。小写字母是变量名称。)无论 的值如何,单位数字始终具有该数字的值ibase
。 (即 A = 10。)对于多位数字,更改所有大于或等于值的bc
输入数字。这使得该数字始终是输入基数中最大的 3 位数字。ibase
ibase-1
ZZZ
(强调我的。)