関数に関してbashのコマンドの順序を理解します。

関数に関してbashのコマンドの順序を理解します。

コマンド自体とすべての引数をf印刷して変数に保存する関数を定義する例があります。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出力を標準入力にリダイレクトしてから、1つの引数ff呼び出しますcat"$@"これは 。標準入力(出力など)を標準出力にf接続します。catcatdf -h

関連情報