我有一个例子,我定义了一个名为f
which 的函数,打印blah
命令本身及其所有参数,然后将其存储到变量中$@
:
# f () { echo blah; "$@"; }
# df -h | f
blah
# df -h | f cat
blah
Filesystem Size Used Avail Use% Mounted on
rootfs 37G 36G 0 100% /
udev 10M 0 10M 0% /dev
tmpfs 304M 308K 303M 1% /run
/dev/disk/by-uuid/466fbdef-029c-4625-8bb2-cde3acd77e55 37G 36G 0 100% /
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.1G 0 2.1G 0% /run/shm
/dev/sda2 74G 7.0G 63G 11% /home
/dev/sr1 5.6M 5.6M 0 100% /media
#
f cat
管道右侧的这部分是如何工作的?的标准输出如何df -h
最终出现在$@
变量中?为什么要cat
打印变量的内容$@
?
答案1
在:
df -h | f
您将df -h
输出重定向到f
标准输入,然后f
在不带任何参数的情况下调用,$@
结果为空。
在另一方面:
df -h | f cat
您将df -h
输出重定向到f
标准输入,然后f
使用一个参数进行调用cat
。"$@"
里面f
扩展到cat
.cat
将标准输入(即df -h
输出)连接到标准输出。