변수가 0으로 설정된 경우 증분 연산자가 변수에 대해 작동하지 않습니다.

변수가 0으로 설정된 경우 증분 연산자가 변수에 대해 작동하지 않습니다.

변수를 증가시키는 것은 varbash와 같이 이중 괄호로 묶을 때 작동합니다 (( var++ )). 하지만 var=0.

$ a=0
$ ((a++)) && echo "command succeeded" || echo "command failed"
command failed

$ a=1
$ ((a++)) && echo "command succeeded" || echo "command failed"
command succeeded

누군가 이 동작을 설명할 수 있나요?

환경:

Ubuntu Desktop 18.04.5 LTS에서 gnome-terminal을 사용하고 있습니다.

답변1

여기에서 신용을 얻으십시오 :https://unix.stackexchange.com/questions/146773/why-bash-increment-n-0n-return-error

(( 표현식 ))의 반환 값은 오류 상태를 나타내지 않지만 bash 맨페이지에서는 다음과 같습니다.

((expression)) 표현식은 아래의 산술 평가에 설명된 규칙에 따라 평가됩니다. 표현식의 값이 0이 아닌 경우 반환 상태는 0입니다. 그렇지 않으면 반환 상태는 1입니다. 이는 let "expression"과 정확히 동일합니다.

당신 은 ((a++))게시물 증가를하고 있습니다. ais 의 값이 0반환 1되고 그 후에는 증가됩니다.

비교하다

$ unset a
$ ((a++)) ; echo Exitcode: $? a: $a
Exitcode: 1 a: 1

~ 대

$ unset a
$ ((++a)) ; echo Exitcode: $? a: $a
Exitcode: 0 a: 1

사전 증분이 a되어 1반환 0됩니다.

답변2

이것은 나에게 효과적입니다 ( bash우분투에서).

$ a=0
$ echo $((a++))
0
$ echo $((a++))
1
$ echo $((a++))
2
$ echo $((a++))
3
$ echo $a
4

차이점을 확인하세요.

$ a=0
$ echo $((++a))
1
$ echo $((++a))
2
$ echo $((++a))
3
$ echo $a
3

관련 정보