了解 bash 中涉及函数时的命令顺序

了解 bash 中涉及函数时的命令顺序

我有一个例子,我定义了一个名为fwhich 的函数,打印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输出)连接到标准输出。

相关内容