나는 셸 스크립트에서 사용자 입력을 구문 분석하는 것입니다. 사용자가 유효한 정수를 제공 한 경우 스크립트는 한 가지 작업을 수행하고 유효하지 않은 경우 다른 작업을 수행합니다. 문제는이 작업을 수행하는 쉽고 (합리적으로 우아한) 방법을 찾지 못했다는 것입니다. 문자별로 구분할 필요가 없습니다.
이게 쉬울 거라는 건 알지만 방법은 모르겠어요. 12 개 언어로 할 수 있지만 BASH는 아닙니다!
내 연구에서 나는 이것을 발견했습니다.
문자열이 10 진법의 유효한 실수로 구성되어 있는지 테스트하기위한 정규식
그리고 거기에 정규식에 대해 이야기하는 대답이 있지만 내가 아는 한 그것은 C에서 사용할 수있는 함수입니다. 그래도 좋은 대답처럼 보였기 때문에 grep으로 시도했지만 grep은 어떻게 해야할지 몰랐습니다. 나는 내 상자에서 PERL 정규 표현식으로 취급한다는 것을 의미하는 -P를 시도했습니다. 대시 E (-E)도 작동하지 않았습니다. 그리고 -F도 마찬가지입니다.
명확하게 말하면, 나는 이와 같은 것을 시도하고, 출력을 찾고 있습니다. 거기에서 내가 얻는 모든 것을 활용하기 위해 스크립트를 해킹 할 것입니다. (IOW, 유효한 라인이 반복되는 동안 부적합한 입력은 아무것도 반환하지 않을 것으로 예상했습니다.)
snafu=$(echo "$2" | grep -E "/^[-+]?(?:\.[0-9]+|(?:0|[1-9][0-9]*)(?:\.[0-9]*)?)$/")
if [ -z "$snafu" ] ;
then
echo "Not an integer - nothing back from the grep"
else
echo "Integer."
fi
누군가 이것이 가장 쉬운 방법을 설명해 주시겠습니까?
솔직히 이것은 TEST의 단점이라고 생각합니다. 다음과 같은 플래그가 있어야합니다.
if [ -I "string" ] ;
then
echo "String is a valid integer."
else
echo "String is not a valid integer."
fi
[
이전 버전과 호환됩니다test
.[[
더 많은 작업과 다른 인용 규칙을 가진 Bash의 새로운 것입니다. 이미 Bash를 고수하기로 결정했다면[[
(정말 훨씬 더 좋습니다 .) 다른 셸로의 이식성이 필요한 경우[[
완전히 피하십시오 .