`echo $((0x63))` 이해하기

`echo $((0x63))` 이해하기

저는 명령줄을 통해 16진수를 변환하는 방법을 찾고 있었는데 매우 쉬운 방법이 있다는 것을 알게 되었습니다 echo $((0x63)).

잘 작동하지만 여기서 무슨 일이 일어나고 있는지 조금 혼란 스럽습니다.

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

이 경우에도 여전히 서브쉘인가요? 나는 그렇지 않다고 생각합니다. 왜냐하면 그것은 서브쉘이 (0x63)어떤 것이 명령이 아닌지 평가한다는 것을 의미하기 때문입니다.

누군가 이 명령을 분석하는 데 도움을 줄 수 있나요?

답변1

$(...)명령 대체(서브쉘뿐만 아니라)이자 $((...))산술 확장이기도 합니다.

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

매개변수 확장 및 명령 대체와 마찬가지로 $((...))쉘의 단어 분리 및 파일 이름 글로빙의 영향을 받지 않도록 따옴표로 묶어야 합니다.

echo "$(( 0x63 ))"

참고로 산술 표현식에 나타나는 변수에는 필요하지 않습니다 $.

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

답변2

이것은 서브쉘이 아니라 산술 평가입니다. ~에서man bash:

((표현하다))

표현식은 아래 설명된 규칙에 따라 평가됩니다.산술 평가. 표현식이 0이 아닌 것으로 평가되면 반환 상태는 0이고, 그렇지 않으면 반환 상태는 1입니다. 이는 let "expression"과 완전히 동일합니다.

관련 정보