fact
如果您进行如下分配,bash shell 是否默认将变量视为整数或长整数?
fact=2
两者都不。它被视为一个字符串。所有shell 变量值都是字符串,除非另有声明(例如declare -i fact
,使用非标准shell 扩展名)。$(())
只有当您使用或将变量值作为参数传递给其他工具(如expr
or )进行算术扩展时,“有多少位以及是否有符号”的问题才有意义bc
。
算术扩展的POSIX Shell 规范说
只需要有符号长整数运算。
bash 手册只保证
评估是在固定宽度的整数中完成的,不检查溢出,尽管除以 0 会被捕获并标记为错误。
由于 C 保证signed long
>= 32 位,您可以放心地假设至少 32 位有符号算术。我希望 64 位系统上有 64 位。