계산된 결과가 0일 때 'let'이 코드 1로 종료되는 이유는 무엇입니까?

계산된 결과가 0일 때 'let'이 코드 1로 종료되는 이유는 무엇입니까?

내가 우연히 만났어이것질문 작성자는 let x=1-1코드 1로 종료하여 발생한 문제를 해결했습니다.

~에 따르면배쉬 매뉴얼:

마지막 표현식이 0으로 평가되면 let은 1을 반환하고, 그렇지 않으면 0을 반환합니다. (페이지 56-57)

나는 bash의 뉘앙스에 대해 잘 알지 못하기 때문에 "이 동작의 원인은 무엇입니까?"라는 질문이 있습니다. 아마도 0이 "false"로 해석되기 때문일까요? 나 같은 bash 초보자에게는 산술 표현식의 결과가 0이 되고 오류 종료 코드가 발생한다는 것이 조금 이상합니다.

답변1

0의 정수 값은 다음으로 평가됩니다.잘못된대부분의 범용 프로그래밍 언어에서 부울 컨텍스트에서 사용될 때. 이는 다음 C 코드와 유사한 코드가 있을 수 있음을 의미합니다.

c = 100;
while (--c) { /* do something while c is non-zero */ }

셸에서 종료 상태 1은 다음과 같이 평가됩니다.잘못된조건부 컨텍스트에서 사용되는 경우.

c=100
while let --c; do
    # do something while c is non-zero
done

여기에 패턴이 보이나요? 루프는 0이 아닌 종료 상태가 반환될 while때까지 실행되며 , 0에 도달하면 반환됩니다. 이 경우 종료 상태가 0이 아닌 것은 "오류"를 의미하는 것이 아니라 단지 결과에 도달했다는 의미일 뿐입니다 .letclet0

그러나 이제는 일반적 으로 다음과 같이 (산술 평가) let로 대체 됩니다.((...))

c=100
while ((--c)); do ...; done

while위의 루프는 내장 c유틸리티 let((...)).

관련 정보