$0
- это имя запущенного процесса.
Поэтому, когда вы вызываете скрипт с ./script.sh
, процесс, который будет запущен, будет /bin/bash ./script.sh
, тогда он $0
вернет ./script. sh
, так что здесь он вызывает скрипт с относительным путем вместо абсолютного, но, когда вы поместите скрипт в каталог, который PATH
смотрит внутрь, вызов будет с абсолютным путем, и возврат $0
будет /usr/bin/script. sh
, потому что процесс /bin/bash /usr/bin/script.sh