AND 연산자를 사용하는 echo 명령이 종료되지 않습니다.

AND 연산자를 사용하는 echo 명령이 종료되지 않습니다.
echo hai && echo bye

인쇄

hai 
bye

하지만

echo hai && echo $?

인쇄

hai
0

첫 번째 echo 명령의 반환 값이 이면 0연산자가 AND실행된 후 echo 문은 어떻게 되나요? AND반환 값이 빨리 나오는 거 못 보셨나요 0?

답변1

&&여러분의 혼란은 많은 인기 언어(특히 C 기반 언어) 가 0을 만나면 시퀀스 평가를 중단한다는 사실에서 비롯됩니다. 0이 고려되고 false나머지는 모두 이기 때문입니다 true. 그러나 Bash에서는 그렇지 않습니다. 관례적으로 POSIX 시스템(및 기타 모든 Unix 계열 시스템)에서는 반환 코드 0이 고려되고 SUCCESS(오류가 없으므로 아무것도 반환되지 않음) 0이 아닌 반환 코드가 고려됩니다 FAILURE. 외부 프로그램(예: C 프로그램)이든 내장 셸이든 Bash의 모든 명령은 값을 반환해야 합니다.

간단한 명령일련의 선택적 변수 할당과 공백으로 구분된 단어 및 리디렉션이 뒤따르고 다음으로 끝납니다.제어 연산자. 첫 번째 단어는 실행할 명령을 지정하고 인수 0으로 전달됩니다. 나머지 단어는 호출된 명령에 인수로 전달됩니다.

a의 반환 값간단한 명령종료 상태이거나 128+입니다.N명령이 신호에 의해 종료되는 경우N.

(...)

셸 내장 명령은 상태 0(진짜) 성공하고 0이 아닌 경우(잘못된) 실행 중 오류가 발생한 경우. 모든 내장 함수는 종료 상태 2를 반환하여 잘못된 사용법을 나타냅니다.

그러나 반환 값은 부울이 아닙니다. 0에서 255 사이의 숫자입니다.

실행된 명령의 종료 상태는 다음과 같습니다.대기 프로세스시스템 호출 또는 이와 동등한 기능. 종료 상태의 범위는 0부터 255까지인데, 쉘에서는 아래 설명처럼 구체적으로 125보다 높은 값을 사용할 수도 있습니다. 쉘 내장 및 복합 명령의 종료 상태도 이 범위로 제한됩니다. 어떤 경우에는 쉘이 특정 오류 모드를 나타 내기 위해 특수 값을 사용합니다.

셸의 경우 종료 상태 0으로 종료된 명령이 성공했습니다. 종료 상태 0은 성공을 나타냅니다. 0이 아닌 종료 상태는 실패를 나타냅니다. 치명적인 신호로 인해 명령이 종료된 경우질소, bash에서 사용하는 값은 128+입니다.질소종료 상태로.

(대담한 내 것.)

명령이 반환 코드를 셸에 다시 보고할 때 일반적으로 종료 코드가 0인지 확인하는 것만으로도 충분합니다.

&&이제 함께 연결된 목록의 다음 명령은 이전 명령이 0을 반환하는 경우에만 실행됩니다 SUCCESS. 즉, 다음과 같습니다.

AND 및 OR 목록은 각각 && 및 제어 연산자로 ||구분된 하나 이상의 파이프 시퀀스 입니다. AND 및 OR 목록은 왼쪽 연관성으로 수행됩니다. AND 목록의 형식은 다음과 같습니다.

              명령 1&&명령 2

명령 2다음과 같은 경우에만 실행됩니다.명령 1종료 상태 0을 반환합니다.

답변2

명령의 반환 값은 일반적인 부울 값과 다릅니다. 명령을 실행할 때 0은 성공을 나타내고 다른 값은 실패를 나타냅니다. 이러한 이유로 &&는 여기서 성공률이 0이 될 것으로 예상합니다.

답변3

여기에서도 zsh을 사용하여

echo hai && echo bye
hai
bye

비슷하게

echo hai && echo %?
hai
0

당신이 보고 있는 명령이 여기에 제공한 명령 hai과 정확히 같은 줄에 있습니까?bye

귀하의 질문에 대한 직접적인 대답에서 종료 상태는 0입니다.성공이므로 두 번째 명령문이 실행됩니다. (이렇게 하면 0이 아닌 다른 종료 상태 값이 다른 오류를 나타낼 수 있습니다.)

관련 정보