So do I misunderstood the concept? If yes than how it actually works?
Sim, a notação ${var#*.}
está removendo tudo, desde o início da string até o ponto de caractere ( .
). Está fazendo o que você pediu, seu padrão era ponto estrela:
*.
Portanto, ele corresponderá a todos os itens até o 1º ponto do início da string, aquele após a palavra bash
.
bash.string.txt
^---------------- it's splitting here
Exemplos
$ str="bash.string.txt"
$ echo "${str#*.}"
string.txt
$ str="bash1.string.txt"
$ echo "${str#*.}"
string.txt
$ str="bash1.string1.txt"
$ echo "${str#*.}"
string1.txt
Veja quando eu coloquei o 1 no lado esquerdo do primeiro .
. Essa notação está truncando tudo até o primeiro ponto.