Bash 스크립트 디코딩

Bash 스크립트 디코딩

Bash 스크립트에는 입력 매개변수를 구문 분석하는 다음 줄이 있습니다.

((10#$2 > 0)) 2>/dev/null && shift 2 || shift

기본적으로 선택적 정수 하위 매개변수를 사용하여 매개변수를 처리하는 데 도움이 됩니다. 좋다:

-x 100 -y

-x -y

어떻게 작동하는지 설명해 주실 수 있나요?

답변1

이 줄은 두 번째 위치 인수가 보다 큰지 확인합니다 0. 조건이 참이면 위치 매개변수 3, 4, ...를 1, 2, ...로 이동합니다. 조건이 거짓이면 위치 매개변수 2, 3, ...을 1, 2, ...로 이동합니다. . ..

앞에 0이 붙은 상수는 8진수로 해석됩니다. 10#$2위치 매개변수가 $2소수로 해석되도록 한다고 합니다 . 참고하셔도 좋을 것 같아요쉘 산술.

따라서 ((10#$2 > 0))10진수의 두 번째 위치 인수가 0보다 큰지 확인합니다. 2>/dev/null이 테스트로 인해 발생하는 모든 오류는 로 리디렉션됩니다 /dev/null. 바라보다Bash 산술 표현식#운영자 에 대한 추가 정보.

&&||조건부 구조입니다 . 따라서 조건이 true shift 2이면 실행하고 그렇지 않으면 shift실행합니다.

expression1 && expression2

표현식1과 표현식2가 모두 참이면 참입니다.

expression1 || expression2

표현식1 또는 표현식2가 참이면 참입니다.

예를 들어 다음을 고려하십시오.

$ ((10>42)) && echo greater || echo smaller    # Condition is false so the `echo smaller` expression is evaluated
smaller
$ ((100>42)) && echo greater || echo smaller   # Condition is true so the `echo greater` expression is evaluated
greater

에서 인용수동:

((...))

(( expression ))

산술 표현식은 다음 규칙에 따라 평가됩니다(셸 산술 참조). 표현식이 0이 아닌 것으로 평가되면 반환 상태는 0이고, 그렇지 않으면 반환 상태는 1입니다. 이것은 정확히 동일합니다

let "expression"

관련 정보