默认情况下,bc 将任何字母字符解释为 9

默认情况下,bc 将任何字母字符解释为 9

系统:

  • 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将字母字符解释为9s ?为什么这里不最好显示错误消息?

答案1

man bcGNU 系统(GNU bc1.07 或更高版本):

一个简单的表达式只是一个常数。bc使用由变量 指定的当前输入基数将常量转换为内部十进制数ibase。 (函数中有一个例外。) 的合法值为ibase2 到 36。(大于 16 的基数是扩展。)
将超出此范围的值分配给ibase将得到 2 或 36 的值。输入数字可能包含字符 0-9 和 AZ。 (注意:它们必须是大写字母。小写字母是变量名称。)无论 的值如何,单位数字始终具有该数字的值ibase。 (即 A = 10。)对于多位数字,更改所有大于或等于值的bc输入数字。这使得该数字始终是输入基数中最大的 3 位数字。ibaseibase-1ZZZ

(强调我的。)

相关内容