Isso porque * teve um significado diferente em seus testes.
Em caso 1 , caso 3 e caso 4 , ele é usado como um correspondência de padrões . Em caso 2 , é um metacaractere expressão regular ( ou quantificador ou estrela de Kleene ).
Na correspondência de padrão, o caractere * corresponderá a qualquer string, incluir string nula, a* corresponderá a qualquer string com a , exemplo a , aa , ab , mas não b
Na expressão regular, * quantifier corresponde a zero ou mais ocorrências do token precedente, a* corresponderá a zero ou mais a sequências, exemplo '' , a , aa , aaa , ab , b .
Com isso em mente, seu caso 4 será interpretado como corresponde a qualquer string contendo - , porque foi usado como correspondência de padrão, sua explicação em questão é usado como uma expressão regular.
Portanto, abcd--1234-defg , a menor correspondência da sub-string *-* é abcd- , e a correspondência mais longa é a string inteira. Desde quando você usa o formulário ${var1#*-*} , que é uma Expansão de Parâmetro para remover o O prefixo mais curto em $var1 match *-* , você obteve -1234-defg , porque o prefixo mais curto correspondido é abcd- .