
변수를 증가시키는 것은 var
bash와 같이 이중 괄호로 묶을 때 작동합니다 (( 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++))
게시물 증가를하고 있습니다. a
is 의 값이 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