Você está confundindo ${#var} (que retorna o comprimento de var ) com ${var##substr} , que retorna o valor de var após remover o prefixo mais longo correspondente substr .
Nesse caso, a substring é */ , ou seja, todos os componentes principais do caminho do nome pelo qual o script foi chamado - deixando apenas o componente final do nome do arquivo, script2 . Embora ambas as expressões usem o caractere # , a posição do # é significativa.
Há também ${var#substr} , que parece superficialmente ainda mais próximo de ${#var} , mas retorna o valor de var após a remoção do prefixo correspondente menor .
Veja por exemplo Removendo parte de uma string