=~
in ( [[ ]]
) é uma correspondência de padrão de expressão regular (ou melhor, uma pesquisa , veja abaixo). Isso é diferente de =
(ou ==
), que usa os mesmos padrões dos caracteres curinga de nome de arquivo.
Em particular, o asterisco em expressões regulares significa "zero ou uma cópia da unidade anterior", portanto abc*
significa ab
mais zero ou mais c
s.
No seu caso, o asterisco final torna o caractere final do argumento de função opcional. No seu exemplo final, o padrão se torna ...68d3G*
e, como G*
corresponde à string vazia, ele corresponde a uma string como ...68d3
. Regexese para "qualquer string" é de .*
, ou "qualquer caractere, qualquer número de vezes".
Observe que a correspondência de expressão regular procura uma correspondência em qualquer lugar da sequência, não precisa ser a sequência inteira . Então, o padrão cde
seria encontrado na string abcdefgh
.
Você pode querer usar algo assim:
[[ "$(md5sum "$1")" = "$2 "* ]] && echo ok
Realmente não precisamos de uma correspondência de expressão regular aqui, e como md5sum
produz o espaço à direita (mais nome de arquivo), podemos usar isso no padrão para verificar se combinamos com o padrão completo. Então, dar à função um hash truncado não corresponderia.