중복된 게시물이라면 사과드립니다. 누군가가 이미 이 질문에 질문/답변을 했는지 확인하기 위해 검색을 시도했지만 아무것도 찾지 못했습니다.
||
Bash에서 그게 무슨 뜻인가요? 예를 들어, 드라이버 문제를 해결하는 단계를 조사하는 동안 다음 명령을 발견했습니다.
modprobe -q vmxnet3 && echo "vmxnet3 installed" || echo "vmxnet3 not installed"
첫 번째 부분은 modprobe를 쿼리하고 "vmxnet3 설치됨"이라는 응답을 반환하는 것입니다(성공적인 반환 코드를 받은 경우). 하지만... 마지막 부분은 무엇을 하고 있나요?
답변1
||
OR 연산자입니다. 왼쪽 명령이 오류를 반환하는 경우에만 오른쪽 명령을 실행합니다. 바라보다&& 및 || 연산자의 사용은 혼란스럽습니다..
귀하의 예가 bash에 적합하지 않다고 생각합니다. 오른쪽 섹션에는 명령이 (이 문제는 해결되었습니다.)||
없습니다 echo
.
답변2
마치 카니발 &&
처럼||
제어 연산자:
&&
다음 명령문의 실행을 나타냅니다.~하지 않는 한앞의 문은 성공적으로 실행됩니다(종료 코드 0이 반환됨).||
다음 명령문의 실행을 나타냅니다.~하지 않는 한이전 문이 실패했습니다(0이 아닌 종료 코드를 반환함).
다른 제어 연산자는 다음과 같습니다:
&
이전 문이 백그라운드에서 실행됨을 나타냅니다.;
이전 문을 실행하고 완료 후 다음 문을 계속 실행함을 나타냅니다.|
이전 명령문이 실행되고 그 표준 출력이 다음 명령문의 표준 입력에 연결됨을 나타냅니다.
결합 &&
하고||
&&
||
if-then-else를 대체하기 위해 결합 할 수 있습니다. 고려하다:
if some_command
then
echo yes
else
echo no
fi
위의 내용은 다음과 같습니다.
some_command && echo yes || echo no
명령이 실패할 경우 두 가지가 다르기 때문에 동일하지 않고 "유사하다"고 말합니다 echo yes
. 명령이 실패 하면 echo yes
(0이 아닌 반환 코드로 종료) echo no
명령이 실행됩니다. 이 버전에서는 이런 일이 발생하지 않습니다 if-then-else-fi
. echo
그러나 터미널에 쓰기 오류가 있는 경우에만 명령이 실패합니다. 따라서 이 차이는 중요하지 않으며 &&
and ||
형식이 단축키로 자주 사용됩니다.
답변3
이는 "또는" 조건입니다.
간단한 예를 들어 보겠습니다.
cmd1 || cmd2
cmd1이 성공하면(즉, 종료 코드 0) cmd2가 실행되지 않습니다. cmd2는 cmd1이 실패한 경우에만 실행됩니다.
이것이 종료 코드를 반환하는 것이 중요한 이유 중 하나입니다.
그런데 이 기능은 매우 오래된 UNIX 쉘에 존재합니다. 이전 sh에는 IF 문이 없었기 때문입니다. 물론 이것은 csh가 존재하기 전의 일이었습니다.