알아요...작은 기본 질문이지만 "-S"가 무엇을 테스트하는지 찾을 수 없나요?
BORG_SOCKET="${BORG_SOCKET:-/run/borg.sock}"
if ! [[ -S $BORG_SOCKET ]]; then
echo "err: borg socket does not exist" >&2
exit 10
...
답변1
[[...]]
쉘 구조입니다. [[
, 및 ]]
는 셸 구문의 예약어입니다. 여기서 셸은 다음과 같은 마이크로 언어 형식을 이해합니다.조건식.
[
이 언어는 유틸리티에 전달된 인수로 구성된 언어와 유사하지만 여러 가지 미묘한 면에서 다릅니다 test
.
쉘 매뉴얼에서 해당 문서를 찾을 수 있습니다. 이 [[...]]
구성은 원래 Korn 쉘에서 왔으며 bash와 zsh에 의해 복사되었지만 둘 사이에는 차이점이 있습니다.
에 대해서는 bash
다음을 참조하세요.조건부 구조마디다음을 통해 시스템에 설치된 버전의 구성을 얻을 수 있습니다.
info -n 'conditional constructs' bash
여기서 [[...]]
운영자에 대해 설명하고 다음 링크를 찾을 수 있습니다.Bash 조건식마디내부 이해의 미시 언어를 설명합니다. 또는 다음을 통해 노드에 직접 액세스할 수 있습니다.
info -n 'Bash Conditional Expressions' bash
거기에서 다음을 찾을 수 있습니다:
-에스문서
만약에 사실이다문서존재하며 소켓입니다.
하도록 하다:
echo "err: borg socket does not exist" >&2
약간 오해의 소지가 있지만 다음과 같아야 합니다.
echo "err: borg socket does not exist or is not a socket" >&2
엄밀히 말하면 다음과 같아야 합니다.
echo "err: borg socket does not exist or I can't determine whether it's a socket or not" >&2
답변2
에서 man test
:
-S FILE 파일이 존재하고 소켓입니다.
답변3
-S
주어진 경로가 존재하고 소켓인지 테스트합니다.(링크된 파일 test
이지만 [[
-S
연산자는 동일한 의미를 갖습니다.) 앞의 내용은 !
테스트 요점을 부정합니다.