
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로 설정됩니다.h
i
[ '' i ]
[
[
echo
음악을 재생하거나 컴퓨터를 다시 시작하는 등의 다른 작업을 수행하도록 or를 재정의하면 더 이상한 일이 발생할 수 있습니다.
전체적으로 이 명령은 의미가 없으며 아마도 사용자를 혼란스럽게 만들려는 목적으로 작성된 것일 수 있습니다.