옵션 매개 변수에 지정된 경우 루프의 카운터가 최대 값보다 큰지 확인하려면 카운터를 검사합니다. 선택 사항이므로 최대 값을 특수 값 또는 가능한 최대 정수로 기본값을 설정할 수 있습니다. 첫 번째 옵션은 각 반복마다 추가 검사가 필요하므로 을 찾으려면 -gt
Bourne Shell 작업과 함께 작동 할 최대 정수는 무엇입니까?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 쉘은 숫자를 저장하거나 조작 할 수있는 기능이 없습니다. 모든 것이 문자열로 저장됩니다. 당신은 이런 종류의 일에 대해 묻는 경우 :
if [ $x -gt $y ]
가 그는 '['라는 심볼릭 링크가 test
라는 실행 파일 (Bourne 쉘에서) 분리에 의해 처리됩니다. 그래서 귀하의 질문은 실제로 내가 찾을 수있는 모든 문서가 매우 과묵하게 보인 test
명령의 한계에 관한 것입니다.
2
을 필자의 시스템에서는 Bash의 최대 정수가 Perl POSIX 라이브러리의 LONG_MAX 상수와 같아 보인다. 그게 테스트하기위한 좋은 출발점이 될 것 같다 그러나 분명히,이 등 플랫폼에 변화하고, 어떻게 배시 컴파일합니다 :
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 비트에 시도 후, 내 Perl의 POSIX LONG_MAX는 2147483647이지만 Bash는 여전히 동일한 제한을 가지고 있습니다. /usr/include/limits.h에 정의되어 있고 32 비트 시스템에서도 64 비트 일 수있는 __WORDSIZE에 따라 달라지는 것 같습니다.