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