하나의 명령에 두 개의 파이프 구문에 약간 혼란 스럽습니다. 작동하지만

다음 구문에 약간 혼란 스럽습니다. 작동하지만 왜 작동하는지 이해하지 못합니다. diff 명령에 두 개의 파이프가 연결된 것처럼 보입니다. 그러나 하나만 있지 STDIN않습니까?

예 :

diff <(echo "foobar") <(echo "barbaz")
diff <(cat foo.txt) <(cat bar.txt)


답변

파이프는 단순히 0 (stdin)과 다른 파일 디스크립터에 바인드됩니다.

$ echo <(true)
/dev/fd/63
$ echo <(true) <(true)
/dev/fd/63 /dev/fd/62

물론 프로세스는 한 번에 둘 이상의 열린 파일 설명자를 가질 수 있으므로 문제가 없습니다.