【发布时间】:2019-02-16 01:05:22
【问题描述】:
对此有很多讨论:Pipe output to bash function
我只想知道为什么:
#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)。
将命令输出作为参数传递给函数的正确/建议方法是什么?
谢谢
更新 +John Kugelman
#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
这只会打印一次。如果我们想使用两次结果怎么办(可能将其存储为变量?)
谢谢,
【问题讨论】:
-
在第二个例子中,如果你想保持 ls 的格式,你可以使用 echo "$1"
-
+Gianluca Mereu 不,我不认为我会工作。作为第一个示例,它将得到空输出。
标签: linux bash shell unix pipe