Что делает ${0%/*}, он расширяет значение, содержащееся в аргументе 0 (это путь, называемый script) после удаления суффикса строки /* с конца.
Итак, $0 совпадает с ${0}, который подобен любому другому аргументу, например. $1, который вы можете написать как ${1}. Как я уже сказал, $0 является особенным, поскольку он не является реальным аргументом, он всегда присутствует и представляет собой имя script. Параметр Expansion работает в {} - фигурных скобках, а % - один из типов расширения параметров.
%/* соответствует последнему вхождению / и удаляет что-либо (* означает что-либо) после этого символа. Взгляните на этот простой пример: