コマンド自体とすべての引数を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つの引数f
でf
呼び出しますcat
。"$@"
これは 。標準入力(出力など)を標準出力にf
接続します。cat
cat
df -h