Comando para comparar duas strings

5

Eu preciso comparar duas strings e ignorar o caso do conteúdo. SE [$ primeiro! = $ Segundo]. Qualquer coisa que eu possa adicionar a esse comando para que a comparação ignore o caso.

    
por Gimmeray 09.12.2015 / 16:14

1 resposta

19

No bash, você pode realizar conversões de caso facilmente, por exemplo, if var="vAlUe" then

$ echo "${var^^}"
VALUE

enquanto

$ echo "${var,,}"
value

Você pode usar isso para tornar a comparação sem diferenciação de maiúsculas e minúsculas, convertendo os dois argumentos para o mesmo caso, ou seja,

if [ "${first,,}" == "${second,,}" ]; then
  echo "equal"
fi

ou

if [ "${first^^}" == "${second^^}" ]; then
  echo "equal"
fi

Outra abordagem é usar a opção bash nocasematch (obrigado @Tshilidzi_Mudau), embora isso pareça funcionar apenas com o operador de teste estendido [[ ... ]] :

$ first=abc; second=ABC
$ (shopt -s nocasematch; if [[ "$first" == "$second" ]]; then echo "Match"; else echo "No match"; fi)
Match

mas

$ (shopt -s nocasematch; if [ "$first" == "$second" ]; then echo "Match"; else echo "No match"; fi)
No match
~$ 
    
por steeldriver 09.12.2015 / 16:25