Существует много дискуссий по этому поводу: Вывод канала в функцию bash
Я просто хочу знать, почему:
#bin/sh
function myfunc () {
echo $1
}
ls -la | myfunc
даст пустую строку.Могу я спросить, почему наш вывод ls
не рассматривается как $1
как функция?Какой механизм стоит за этим?
Если мы попытаемся:
#bin/sh
function myfunc () {
i=${*:-$(</dev/stdin)}
echo $i
}
ls -la | myfunc
Тогда мы получим:
total 32 drwxr-xr-x 6 phil staff 204 Sep 11 21:18 . drwx------+ 17 phil staff 578 Sep 10 21:34 .. lrwxr-xr-x 1 phil staff 2 Sep 10 21:35 s1 -> t1 lrwxr-xr-x 1 phil staff 2 Sep 10 21:35 s2 -> t2 lrwxr-xr-x 1 phil staff 2 Sep 10 21:35 s3 -> t3 -rwxr-xr-x 1 phil staff 96 Sep 11 21:39 test.sh
, который не сохраняетфактический формат ls -la
(с \ n).
Какой правильный / предлагаемый способ передачи вывода команды в функцию в качестве параметра как есть?
Спасибо
Обновление + Джон Кугельман
#bin/sh
function myfunc () {
cat | grep "\->" | while read line
do
echo $line
done
cat | grep "\->" | while read line
do
echo "dummy"
done
}
ls -la | myfunc
Печать будет выполняться только один раз.Что если мы хотим использовать результат дважды (сохранить его как возможную переменную?)
Спасибо,