파일을 살펴보고 있는데 /etc/rc.d/init.d/sendmail
(이것이 거의 사용되지 않는다는 것은 알지만 시험 공부를 하고 있는 중입니다) &&
and 연산자에 대해 ||
약간 혼란스럽 습니다. 나는 다음과 같은 진술에 사용될 수 있다는 것을 읽었습니다.
if [ test1 ] && [ test2 ]; then
echo "both tests are true"
elif [ test1 ] || [ test2 ]; then
echo "one test is true"
fi
그러나 이 스크립트는 다음과 같은 한 줄 문을 표시합니다.
[ -z "$SMQUEUE" ] && SMQUEUE="QUEUE"
[ -f /usr/sbin/sendmail ] || exit 0
&&
이는 테스트를 기반으로 응답을 도출하기 위해 및 연산자를 사용하는 것으로 보이지만 ||
이러한 연산자의 특정 사용법에 대한 문서를 찾을 수는 없습니다. 이 특정한 경우에 그들이 무엇을 하는지 설명할 수 있는 사람이 있습니까?
답변1
&&
오른쪽은 왼쪽의 종료 상태가 0(즉, true)인 경우에만 평가됩니다. ||
반대로, 왼쪽의 종료 상태가 0이 아닌 경우(즉, false) 오른쪽만 평가합니다.
[ ... ]
값을 반환하는 프로그램이라고 생각하시면 됩니다 . 내부 테스트 결과가 true이면 0을 반환하고, 그렇지 않으면 0이 아닌 값을 반환합니다.
예:
$ false && echo howdy!
$ true && echo howdy!
howdy!
$ true || echo howdy!
$ false || echo howdy!
howdy!
추가 지침:
이렇게 하면 프로그램을 가리킨다는 which [
것을 알 수 있습니다 ! 그러나 일반적 으로 실제로 실행되는 내용을 확인하기 위해 [
스크립트에서 실행되지 않습니다 . type [
프로그램을 사용해 보려면 다음과 같이 전체 경로를 제공하면 됩니다 /bin/[ 1 = 1
.
답변2
내 치트 시트는 다음과 같습니다.
- "A ; B"는 A의 성공 여부에 관계없이 A를 실행한 다음 B를 실행합니다.
- "A && B" A가 성공하면 B를 실행합니다.
- "A || B" A가 실패하면 B를 실행합니다.
- "A &"는 A를 백그라운드에서 실행합니다.
답변3
위의 @ Shawn-j-Goff의 답변을 확장하면 논리적 AND와 논리적 OR이 &&
있습니다 .||
바라보다이것고급 Bash 스크립팅 가이드의 일부입니다. 링크에 포함된 내용 중 일부는 다음과 같이 사용자의 참고를 위한 것입니다.
&& 그리고
if [ $condition1 ] && [ $condition2 ]
# Same as: if [ $condition1 -a $condition2 ]
# Returns true if both condition1 and condition2 hold true...
if [[ $condition1 && $condition2 ]] # Also works.
# Note that && operator not permitted inside brackets
#+ of [ ... ] construct.
||또는
if [ $condition1 ] || [ $condition2 ]
# Same as: if [ $condition1 -o $condition2 ]
# Returns true if either condition1 or condition2 holds true...
if [[ $condition1 || $condition2 ]] # Also works.
# Note that || operator not permitted inside brackets
#+ of a [ ... ] construct.
답변4
"단축키"라는 개념이 있습니다.
평가 시기 (expr1 && expr2)
- "true"로 평가되는 경우에만 평가합니다 expr2
. AND가 모두 참이어야 참이 되기 exp1
때문입니다 . "false"로 평가되면 이미 "flase"이므로 평가(단축키)되지 않습니다 .expr1
expr2
(expr1 && expr2)
expr1
expr2
(expr1 && expr2)
다음을 시도해 보십시오. 파일은 F1
존재하지만 파일은 F2
존재하지 않는다고 가정합니다.
( [ -s F1 ] && echo "File Exists" ) # will print "File Exists" - no short cut
( [ -s F2 ] && echo "File Exists" ) # will NOT print "File Exists" - short cut
(or)와 유사 ||
하지만 단락은 반대입니다.