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 つのファイル/ディレクトリのみに一致する (または一致しない) 場合を除き、単一の引数ではないことに注意してください。
"$@"
すべての引数を受け入れる場合は、スクリプト内で二重引用符を使用する必要があります。($*
スペースを含むファイル名では壊れてしまうため、使用しないでください。)