良い解説があったので解決しました。
https://www.in-ulm.de/~mascheck/various/bourne_args/

スクリプトに引数を与えない場合、
一部の古いシステムでは "$@" の解釈が
nothing (何もない) ではなく "" (空文字)になってしまうからだそうです。