bash shell是否将"fact = 2"这样的赋值视为整数或长整数?

Bou*_*rne 2 bash scripting types integer

fact如果你正在进行如下的赋值,bash shell 默认是将变量视为整数还是长整数?

fact=2
Run Code Online (Sandbox Code Playgroud)

Jen*_*ens 5

都不是.它被视为一个字符串.除非另有声明,否则所有shell变量值都是字符串(例如declare -i fact,使用非标准shell扩展).当您使用$(())或将变量值作为参数传递给其他工具(例如expr或)时,"有多少位并且有符号"的问题才变得有意义bc.

算术扩展的POSIX Shell规范

只需要签名的长整数运算.

bash手册只保证

评估是在固定宽度的整数中完成的,没有检查溢出,但是除以0被捕获并标记为错误.

由于C保证signed long> = 32位,因此可以安全地假设至少32位有符号的arithemetic.我希望在64位系统上有64位.