`echo $ ((0x63)) ‘이해하기 $(…)일반적으로 외부 명령 전에 내용이 평가되는

커맨드 라인을 통해 16 진수를 변환하는 방법을 찾고 있었고 매우 쉬운 방법이 있음을 발견했습니다 echo $((0x63)).

훌륭하게 작동하지만 여기서 일어나는 일에 대해 약간 혼란 스럽습니다.

나는 $(...)일반적으로 외부 명령 전에 내용이 평가되는 하위 쉘이라는 것을 알고 있습니다.

이 상황에서 여전히 하위 셸입니까? 나는 그것이 하위 쉘이 (0x63)명령이 아닌 평가 하는 것을 의미하지는 않을 것이라고 생각 합니다.

누군가 나를 위해 명령을 나눌 수 있습니까?



답변

$(...)서브 쉘뿐만 아니라 명령 대체이지만 $((...))산술 확장입니다.

를 사용 $((...))하면 ...은 (는) 산술 표현식으로 해석됩니다. 이것은 무엇보다도 16 진 문자열이 숫자로 해석되어 10 진수로 변환됨을 의미합니다. 그러면 전체 표현식이 표현식이 평가하는 숫자 값으로 대체됩니다.

매개 변수 확장 및 명령 대체와 마찬가지로 $((...))셸의 단어 분할 및 파일 이름 globbing의 영향을받지 않도록 인용해야합니다.

echo "$(( 0x63 ))"

참고로 산술 연산 식에서 발생하는 변수는 다음과 같은 것이 필요하지 않습니다 $.

$ x=030; y=30; z=0x30
$ echo "$(( x + y +x ))"
78

답변

이것은 서브 쉘이 아니라 산술 평가입니다. 보낸 사람 man bash:

((표현))

식은 아래의 산술 평가에 설명 된 규칙에 따라 평가 됩니다. 표현식의 값이 0이 아닌 경우 리턴 상태는 0입니다. 그렇지 않으면 리턴 상태는 1입니다. 이것은 “표현식”과 정확히 같습니다.