Dash не поддерживает подстановку процессов (<()
).
Поведение, которое вы видите, является последовательным, если вы используете синтаксис, поддерживаемый каждой из сравниваемых оболочек.Попробуйте это:
echo hello | cat < inputfile
Вы должны увидеть содержимое «inputfile», а не «hello».Из нескольких оболочек, которые я пробовал, только оболочка Z показала оба.
Это то, что говорит POSIX относительно конвейеров и перенаправления:
Стандартный выход команды command1 должен быть подключен к стандартному входуcommand2.Стандартный ввод, стандартный вывод или обе команды должны рассматриваться как назначенные конвейером перед любым перенаправлением, указанным операторами перенаправления, которые являются частью команды (см. Перенаправление).
Я интерпретируюэто означает, что в случае вышеприведенного примера конвейер присваивает stdin значение cat
, затем перенаправление отменяет его.