입력이 정수인지 확인하려고 하는데, 수백 번 확인했는데 오류가 발견되지 않았습니다. 아아 작동하지 않습니다. 모든 입력(숫자/문자)에 대해 if 문을 트리거합니다.
read scale
if ! [[ "$scale" =~ "^[0-9]+$" ]]
then
echo "Sorry integers only"
fi
나는 따옴표를 사용해 보았지만 놓쳤거나 아무것도 하지 않았습니다. 내가 뭘 잘못했나요? 입력이 정수인지 테스트하는 더 쉬운 방법이 있습니까?
답변1
따옴표 제거
if ! [[ "$scale" =~ ^[0-9]+$ ]]
then
echo "Sorry integers only"
fi
답변2
답변3
OP는 양의 정수만 원하는 것 같기 때문에:
[ "$1" -ge 0 ] 2>/dev/null
예:
$ is_positive_int(){ [ "$1" -ge 0 ] 2>/dev/null && echo YES || echo no; }
$ is_positive_int word
no
$ is_positive_int 2.1
no
$ is_positive_int -3
no
$ is_positive_int 42
YES
[
테스트가 필요합니다.
$ [[ "word" -eq 0 ]] && echo word equals zero || echo nope
word equals zero
$ [ "word" -eq 0 ] && echo word equals zero || echo nope
-bash: [: word: integer expression expected
nope
이는 역참조가 다음에서 발생하기 때문입니다 [[
.
$ word=other
$ other=3
$ [[ $word -eq 3 ]] && echo word equals other equals 3
word equals other equals 3
답변4
부호 없는 정수의 경우 다음을 사용합니다.
read -r scale
[ -z "${scale//[0-9]}" ] && [ -n "$scale" ] || echo "Sorry integers only"
시험:
$ ./test.sh
7
$ ./test.sh
777
$ ./test.sh
a
Sorry integers only
$ ./test.sh
""
Sorry integers only
$ ./test.sh
Sorry integers only