무슨 뜻이에요! [[ -S $변수]]?

무슨 뜻이에요! [[ -S $변수]]?

알아요...작은 기본 질문이지만 "-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연산자는 동일한 의미를 갖습니다.) 앞의 내용은 !테스트 요점을 부정합니다.

관련 정보