이 테스트 표현은 무엇을 의미하나요?

이 테스트 표현은 무엇을 의미하나요?

test(1), bash(1) 및 dash(1)에 대한 매뉴얼 페이지를 읽었지만 이 테스트가 무엇을 의미하는지 알 수 없습니다.

[ `echo hi` > /dev/null ]

매뉴얼 페이지에 따르면 조건식에는 기본 조건식과 결합 조건식이라는 두 가지 유형이 있습니다. 조합표현은 원색으로 구성된 표현이다.

원래 목록을 살펴봤지만 위 표현식의 구문과 일치하는 항목은 없습니다. 누군가 나를 위해 그것을 분해할 수 있습니까?

답변1

좋아요 저는 bash를 처음 접했지만 귀하의 질문은 명확하지만 귀하가 요구하는 내용을 완전히 이해할 수는 없습니다. 이는 부적절할 수 있습니다. 그렇다면 말해주세요.

TEST IF "echo hi > /dev/null" is success

[ `echo hi` > /dev/null ]
| |   |   | |           |
| |   |   | |           +--- Last test argument
| |   |   | +--------------- Redirect standard out to /dev/null
| |   |   +----------------- Backtick - End Command Substitution
| |   +--------------------- echo hi
| +------------------------- Backtick - Start Command Substitution
+--------------------------- Test

에코 또는 리디렉션이 실패하면 테스트가 실패하고, 그렇지 않으면 성공합니다.

명령이 실행되면 0성공을 나타내는 종료 코드 또는 오류가 표시 됩니다 <> 0. 따라서 둘 중 하나라도 실패하면 모든 것이 실패합니다.

이 모드 "[ ... ]"는 와 다르지만 if (foo == bar)실제로는 마지막 인수로 필요한 명령입니다 [.]

[이는 또한 and 전후에 공백이 필요한 이유를 설명합니다 ].

답변2

이는 다음과 같습니다.

[ `echo hi` ] > /dev/null

리디렉션은 회선의 어느 곳에나 나타날 수 있습니다.

일반적으로

[ hi ]

그 자체는 다음과 같습니다.

true

이 명령은 아무 것도 출력하지 않고 성공적인 종료 상태를 반환합니다.

다음과 같은 경우 결과가 달라질 수 있습니다.

  • 예를 들어 열려 있는 파일의 한도에 도달했거나 쓰기 권한이 없는 경우 리디렉션이 실패합니다 /dev/null(이 역시 일반적인 상황에서는 발생하지 않습니다). 이 경우 쉘은 0이 아닌 종료 상태를 반환하고 오류 메시지가 표시되며 명령 [이 실행되지 않습니다.
  • 명령 대체에 실패했습니다(예: 더 이상 프로세스를 분기할 수 없거나 최대 파일 설명자 수에 도달하여 파이프를 시작할 수 없기 때문에). 이 경우 셸에 따라 셸 중단을 포함하여 여러 가지 일이 발생할 수 있습니다.
  • 또는 $IFS가 포함된 경우 (예: IFS=h의 경우): 로 확인됩니다. 이는 유효하지 않으며 오류가 반환되고 종료 상태가 Unsuccessful로 설정됩니다.hi[ '' i ][
  • [echo음악을 재생하거나 컴퓨터를 다시 시작하는 등의 다른 작업을 수행하도록 or를 재정의하면 더 이상한 일이 발생할 수 있습니다.

전체적으로 이 명령은 의미가 없으며 아마도 사용자를 혼란스럽게 만들려는 목적으로 작성된 것일 수 있습니다.

관련 정보