Linux シェル関数の du コマンドは 1 行の出力しか生成しません

Linux シェル関数の du コマンドは 1 行の出力しか生成しません

duファイルの使用状況を表示するためにコマンドを使用しています:

$ sudo du -hsx /* | sort -rh | head -n 40
16G     /home
5.3G    /var
2.6G    /usr
840M    /run
...

そして、繰り返しの作業から解放される関数を書きたいと思います。

show_disk() {
    sudo du -hsx "$1" | sort -rh | head -n 40
}

しかし、この関数を実行すると、du次のように 1 行の出力のみが表示されます。

$ show_disk() /*
0   /bin

duシェル関数ではコマンドの動作が異なるように思えますが、どこが間違っているのでしょうか? ご助力いただければ幸いです。

答え1

$1は最初の引数です。ワイルドカードを展開するのはアプリではなくシェルなので、*1 つのファイル/ディレクトリのみに一致する (または一致しない) 場合を除き、単一の引数ではないことに注意してください。

"$@"すべての引数を受け入れる場合は、スクリプト内で二重引用符を使用する必要があります。($*スペースを含むファイル名では壊れてしまうため、使用しないでください。)

関連情報