我在循环中检查计数器以确定它是否大于某个最大值(如果在可选参数中指定)。由于它是可选的,我可以将最大值默认为特殊值或最大可能的整数。第一个选项需要在每次迭代时进行额外的检查,所以我想反过来找出Bourne Shell操作将与-gt
一起使用的最大整数是多少。在Bourne Shell中查找最大正整数值
3
A
回答
3
我会留下清晰的整数限制,因为它们是不可移植和问题
$ test 123412341234112341235 -gt 1 || echo bash compares ints
-bash: test: 123412341234112341235: integer expression expected
bash compares ints
$ env test 1 -gt 123412341234112341235 || echo coreutils compares strings
coreutils compares strings
相反,我只希望做你的建议和不喜欢多余的比较:
[ "$limit" ] && [ $count -gt $limit ]
2
Bourne shell没有用于存储或操作数字的设施 - 所有内容均以字符串形式存储。如果你问这样的事情:
if [ $x -gt $y ]
然后由一个单独的处理(在Bourne shell)中称为test
可执行文件,有一个名为“[”的符号链接。所以你的问题是关于test
命令的限制,我可以找到的所有文档似乎都很谨慎。
2
在我的系统中,Bash的最大整数似乎与我的Perl POSIX库的LONG_MAX常量相同。显然,这将你的平台上,但似乎是一个很好的起点,测试它变化,以及您的bash编译等:
declare -i max=$(perl -MPOSIX -le 'print LONG_MAX')
echo $max
9223372036854775807
echo "max+1 = " $((i += 1))
max+1 = -9223372036854775808
uname -a
Linux x200s 3.2.0-33-generiC#52-Ubuntu SMP Thu Oct 18 16:29:15 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
更新:在旧的32位Linux试图在此之后,我看到我的Perl的POSIX LONG_MAX是2147483647,但是Bash仍然有相同的限制。它似乎在/usr/include/limits.h中定义,并取决于您的__WORDSIZE,即使在32位系统上也可能是64位:
/* Minimum and maximum values a `signed long int' can hold. */
# if __WORDSIZE == 64
# define LONG_MAX 9223372036854775807L
# else
# define LONG_MAX 2147483647L
# endif
相关问题
- 1. bourne-shell查找 - 删除
- 2. 在数组中查找最大整数?
- 3. 谁在bourne-shell中返回值
- 4. shell脚本:找到整数序列最大值不排序
- 5. 在数组递归方法中查找最大整型值
- 6. 使用(java编程)在hadoop中查找最大整数值
- 7. 在hadoop中查找最大整数值(使用java编程)
- 8. 在数据结构中查找最大值最大值和最大键值
- 9. Unix脚本 - 查找最小值和最大值(Bash Shell)
- 10. 在正整数的有序列表中查找最大的正数delta
- 11. Bourne shell版本
- 12. Bourne shell脚本
- 13. 查找数组中的最大值
- 14. Java:查找数组中的最大值
- 15. 查找最大值和最小值并从文件中打印行的Unix shell
- 16. 在CUDA中查找最大值
- 17. 在python中查找最大值
- 18. 在VBA中查找列的最大值
- 19. Python:在csv中查找最大新值
- 20. 在Doctrine中查找Groupwise最大值
- 21. 如何在IntList中查找最大值?
- 22. 查找最大值和最小值指数在名单在Python
- 23. 查找最大,最小和中间值
- 24. 在Java中查找num值和最小值/最大值值
- 25. Bourne Shell的条件
- 26. Bourne Shell脚本中的“参数太少”
- 27. 在数组中找到最大值并在javascript中找到最大值
- 28. 查找最大值/最小值
- 29. 查找最小值和最大值JAVA
- 30. PHP - 在多维数组中查找最小/最大值