$0 é o nome do processo em execução.
Portanto, quando você chamar o script com ./script.sh , o processo que será executado será /bin/bash ./script.sh , então $0 retornará ./script.sh , então chame o script com caminho relativo em vez de seu caminho absoluto, mas , quando você colocar o script no diretório que PATH olha dentro, a chamada será com o caminho absoluto e o retorno de $0 será /usr/bin/script.sh porque o processo é /bin/bash /usr/bin/script.sh