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-
.