Это называется подстановка процесса и является функцией bash, zsh и ksh (и, возможно, других, я не знаю). Это не POSIX, и вы не должны использовать его в переносимом коде, но это очень полезно.
Вот соответствующий раздел руководства по bash:
3.5.6 Замена процесса
Подстановка процессов поддерживается в системах, которые поддерживают именованные каналы (FIFO) или метод / dev / fd именования открытых файлов. Это принимает форму
<(list)
или
>(list)
Список процессов запускается с его входом или выходом, подключенным к FIFO или некоторому файлу в / dev / fd. Имя этого файла передается в качестве аргумента текущей команде в результате расширения. Если используется форма> (список), запись в файл обеспечит ввод для списка. Если используется форма <(list), файл, переданный в качестве аргумента, следует прочитать, чтобы получить вывод списка. Обратите внимание, что между <или> и левой круглой скобкой не должно быть пробела, в противном случае конструкция будет интерпретирована как перенаправление.
Когда доступно, подстановка процесса выполняется одновременно с расширением параметров и переменных, подстановкой команд и арифметическим расширением.
git diff --no-index file1 <(cat file2)
потерпит неудачу с:error: /dev/fd/63: unsupported file type
. Вы также можете увидетьerror: readlink("/dev/fd/63"): No such file or directory
, создает ли реализация символическую ссылку на канал (почему-то для меня она выглядит как неработающая ссылка).