труба (|
) предназначена для обработки выходных данных одной команды, которые будут отправлены в качестве входных данных для другой команды, например:
echo "hello there"
просто напечатает hello there
, но при установке |
и добавьте код sed
после него, например, -> echo "hello there" | sed "s/hello/hi/"
, тогда он напечатает hi there
, потому что вывод echo работает как стандартный ввод для команды sed
.
Итак, в вашем первом случае:
sleep 3 | echo "Hello world."
sleep не отправляет вывод в echo
, и он только запускает процесс ожидания в бэкэнде, а стандартный вывод команды echo показывает нам Hello world
на экране.
Но в2-й случай: когда echo
отправляет стандартный вывод в команду сна в качестве стандартного ввода, я полагаю, что он не принимает его, так как режим сна принимает только параметры (цифровые значения), чтобы сообщить ему, сколько времени нужно, чтобы поставить процесс ожидания вболее того, НЕ предполагается выводить какой-либо стандартный вывод на экран, чтобы там не происходило печатание.