Он превращает строку в дескриптор файла для вывода сценария bash, который он представляет. Это может быть запутанным, вот пример
, если вы наберете echo <(ls), он откроет новый файловый дескриптор, имя которого будет заменено. Таким образом, команда может перейти в echo /dev/fd/63.
Программа, ожидающая, что файл теперь может читать вывод команды без необходимости принимать stdin.
$ my_program ls
Error: 'ls': No such file or directory.
$ my_program <(ls)
my_program was called with the argument /dev/fd/63
bin dev etc ...
Многие программы Linux, если не снабжены источником ввода , дождитесь стандартного ввода. Поскольку стандартный вывод может быть подключен к стандартным входам с помощью оператора «|», вы можете использовать say ls | grep hello. Это работает только потому, что grep ждал ввода в ожидании, если бы ожидал, что имя файла будет открыто и прочитано для получения его данных, оператор трубы не работает. Вот почему вам нужно & lt; (...).
Надеюсь, это понятно. : -)
Вместе с & lt; оператор перенаправляет вывод файла на чтение программ с помощью stdin, это делает следующее значение:
Bash: прочитайте вывод из этого файла, который создается из вывода этой команды.
Разъяснения:
стандартный ввод: «файл» (на самом деле, но в Linux все действует как файл), который при чтении волшебным образом содержит то, что вы набрали стандартный вывод: a «файл», который при записи на него будет распечатан оператором виртуального терминала (т.е. < или <()): то же, что и в обычной математике, выражения операторов и операндов будут оцениваться и заменяться. 3 + 2 * 3 превращается в 5 * 3 поворотов в 15. Это то же самое на языке bash.Хорошим примером для подчеркивания точки Роджера является это выражение:
if [ -f my_condition ] then something fi
Здесь содержимое скобок будет оцениваться как условное утверждение, т.е. если my_condition истинно, тогда do что нибудь. Но: [ на самом деле является просто псевдонимом программы test, который при вызове с параметром -f проверяет наличие файла.