내가 찾은
[ ! -f /etc/default/lxc-net ] || . /etc/default/lxc-net
Ubuntu 16.04 에서는 /etc/default/lxc
교체되는 것 같습니다(내 코드 또는 패키지 관리자의 코드).
[ -f /etc/default/lxc-net ] && . /etc/default/lxc-net
테스트는 반직관적이므로(파일이 존재하지 않아 테스트가 실패하면 명령을 실행) -version에 비해 장점이 있는지 궁금합니다 &&
.
답변1
응, 신경쓰이면복합 문의 종료 코드. 다음을 시도해 보십시오:
#! /bin/sh -
! "$@" || true
echo "$?"
"$@" && true
echo "$?"
true
그런 다음 false
및 인수를 사용하여 실행하십시오.
./script true
0
0
./script false
0
1
이 때문입니다단락 평가부울 표현식.
OP의 예에서 우리는파일이 존재하지 않습니다:
- 첫 번째 경우, 첫 번째 조건은 두 번째 연산(
TRUE OR x = TRUE
)을 평가하지 않고 TRUE를 반환합니다. 복합문의 결과는 TRUE입니다. - 두 번째 경우에는 첫 번째 조건이 두 번째 연산(
FALSE AND x = FALSE
)을 평가하지 않고 FALSE를 반환합니다. 복합문의 결과는 FALSE입니다.
종료 코드는 매우 중요합니다. 확인하다bash 스크립트에서 set -e는 무엇을 의미합니까?set -e
, trap
및 의 가능한 의미를 확인하세요 set -o pipefail
.
답변2
[ -f file ]
file
존재하는 경우 true그리고입니다 plain file
.
[ ! -f file ]
file
존재하지 않으면 참또는다른 파일 형식입니다.
따라서 가독성 외에는 실질적인 차이가 없습니다.