왜 a = 0입니까? ++에서 종료 코드 1을 반환하도록 하시겠습니까?


16

시도 해봐:

$ a=0
$ let a++
$ echo $?
1 # Did the world just go mad?
$ echo $a
1 # Yes, it did.
$ let a++
$ echo $?
0 # We have normality.
$ echo $a
2

이것과 대조 :

$ b=0
$ let b+=1
$ echo $?
0

그리고 이것은 ( Sirex에서 ) :

$ c=0
$ let ++c
$ echo $?
0

무슨 일이야?

$ bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)

답변:


19

보낸 사람 help let:

Exit Status:
If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise..

이후 var++입니다 포스트 -Increment는, 나는 마지막 인수 추측 않습니다 제로로 평가합니다. 교활한...

아마도 더 명확한 예 :

$ let x=-1 ; echo x=$x \$?=$?
x=-1 $?=0
$ let x=0 ; echo x=$x \$?=$?
x=0 $?=1
$ let x=1 ; echo x=$x \$?=$?
x=1 $?=0
$ let x=2 ; echo x=$x \$?=$?
x=2 $?=0

1
좋은 자리. ++ a가 + = 1과 동일하게 작동한다고 생각합니다
Sirex

그렇습니다.
l0b0 2019

1
기록적으로,이 동작은 ksh88 인스턴스에서 동일합니다 (후행이 증가 let a++하지는 않지만)
rahmu

1
고마워, 그것은 나를 도왔다. 그리고 나는 더 이상 시간을 낭비하지 않을 것이다. "왜?"
사용자가 아닌 사용자
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.