bash는 하위 쉘 명령 stdout, <<<$(command) 및 <<(command)를 리디렉션합니다.

bash는 하위 쉘 명령 stdout, <<<$(command) 및 <<(command)를 리디렉션합니다.

더 설명하지 않고 command < <(command)대신 사용하는 것을 권장합니다 . command <<< $(command)작동하지만 이해가 안 돼요. 누군가 이것에 대해 자세히 설명해 주시겠습니까?

후자의 경우 괄호 안의 (명령)이 서브쉘의 명령을 실행한다고 생각합니다. 표준 출력은 $()로 캡처됩니다. 마지막으로 <<<는 이를 "file here"로 상위 쉘에 있는 명령의 표준 입력으로 리디렉션합니다.

대조적으로, 이전 구성은 첫 번째 파일의 내용을 <상위 쉘의 표준 입력으로 리디렉션합니다. 괄호는 서브쉘에서 (명령)을 실행합니다. 따라서 "<(명령)"은 서브쉘의 표준 출력을 파일로 저장합니다. 아니면 이것이 어떻게 작동합니까?

답변1

<<<여기에 문자열이 있습니다. 여기에 있는 문서와 유사합니다. 다음 단어 <<<와 줄 바꿈이 명령의 표준 입력에 전달됩니다. 구문: ( command <<< "some sentence"와 유사 echo "some sentence" | command하지만 서브셸의 오버헤드가 없음)


명령 대체: "$(cmd "foo bar")""cmd" 명령이 "foo bar" 인수와 함께 실행되고 "$(..)"출력으로 대체됩니다. 바라보다http://mywiki.wooledge.org/BashFAQ/002그리고http://mywiki.wooledge.org/CommandSubstitution


절차적 대체: <(command)or는 or 항목 >(command)으로 대체됩니다 . 기본적으로 명명된 파이프를 설정하는 약어입니다. 바라보다FIFO/dev/fd/*http://mywiki.wooledge.org/ProcessSubstitution예:diff -u <(sort file1) <(sort file2)


command < <(othercommand)othercommand | command# 와 같지만서브쉘 없음'주문하다'. 프로세스 대체(<())로 생성된 파일을 리디렉션하려면 파일 리디렉션(<)을 사용합니다. 모호함을 피하기 위해 <와 <(..) 사이의 공백은 중요합니다(구분된 문서입니까 아니면 리디렉션된 PS입니까?).

관련 정보