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++
b
a
b
a
b
2
a
1
$((++a))
a
2
$b
b
2
echo
echo
2 2