산술 표현식에서 간접 확장을 사용한 변수 확장의 두 가지 예에 대해 알아보세요.

산술 표현식에서 간접 확장을 사용한 변수 확장의 두 가지 예에 대해 알아보세요.

Stéphane Chazelas는 두 가지 예를 들었습니다.변수의 값은 참조되거나 할당될 때 산술 표현식으로 평가됩니다.

$ a=1+1; echo "$((a * 3)) $(($a * 3))"
6 4

$ a=a=b++ b=1 bash -c 'echo "$((++a)) $b"'
2 2

산술식에서 변수 확장을 위한 간접 확장이 존재하는 것으로 알고 있습니다. 하지만 난 이해가 안 돼요

  • a첫 번째 예의 합계가 어떻게 $a그러한 차이를 가져오는가? 내 혼란은 산술 표현식에서 변수에 매개변수 확장이 필요하지 않고 ${}변수를 직접 작성한다는 사실에서 비롯됩니다 .

  • 두 번째 예의 산술 표현식은 어떻게 평가됩니까?

감사해요.

답변1

매개변수 확장같지 않음산술 평가.

산술 표현식에서는 와 같은 텍스트 문자열이 a변수 이름으로 해석되고 해당 변수의 값이 산술 표현식 자체로 처리되며 그 결과가 포함된 산술 표현식에 사용됩니다. 그러므로

$((a * 3))

a변수의 값인 가 1+1산술 표현식으로 평가되어 가 되고 2전체 표현식은 가 됩니다 $((2 * 3)). 6.

같은 맥락에서, 이전 단계 $a에서 (a이것매개변수 확장입니다.)

$(($a * 3))

가 되면 일반적인 우선순위 규칙을 따릅니다 $((1+1 * 3)).4

두 번째 예에서는 $((++a))처리가 이전에 발생합니다 $b(처리는 왼쪽에서 오른쪽으로 진행됨). 산술 표현식은 a위에서 설명한 대로 산술 표현식 자체로 평가됩니다. 평가할 때 값 a( 그 자체는 산술 표현식으로 평가됨)이 에 할당된 다음 증가됩니다 . 따라서 평가 후에 는 그렇습니다 . 증분을 계산 하고 해당 값을 반환합니다 . 현재 값은 입니다 . 또한 값으로 바꾸십시오 . 참조된 인수가 처리된 후에는 유일한 인수로 실행 되어 표시되는 출력을 생성합니다.a=b++babab2a1$((++a))a2$bb2echoecho2 2

관련 정보