我在循環中檢查計數器以確定它是否大於某個最大值(如果在可選參數中指定)。由於它是可選的,我可以將最大值默認爲特殊值或最大可能的整數。第一個選項需要在每次迭代時進行額外的檢查,所以我想反過來找出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 - 在多維數組中查找最小/最大值