Significado dos operadores BASH “^”, “|” e “$” na condição ^ (n | N) $

2

No meu script, estou tentando fazer a condição "Tente novamente? [y / N]" ...

if [[ "$response" =~ ^(n|no)$ ]]; then do something...,

mas não entendo o significado dos símbolos "^" e "$" usados aqui. Eu tentei apenas [[ if $response =~ (n|no) ]] e funcionou, mas se eu digitei algo como "nein" ele ainda funcionava ... eu peguei o pipe (|) como operador "OR", mas provavelmente também está errado.

Alguém poderia me explicar o significado da condição inteira? Funciona, mas eu gostaria de saber o significado também ... Muito obrigado.

    
por Michal 25.03.2018 / 00:43

1 resposta

8

Estes são caracteres especiais de expressões regulares.

^ é uma âncora para o início da string (Então, nada pode ser antes da partida)

$ é uma âncora para o final da string (então nada pode ser depois da partida)

| é OU como você suspeitava

O =~ diz ao bash extended test que a string à direita é uma expressão regular estendida e sairá com 0 para correspondência e 1 para qualquer outra coisa.

[[ if $response =~ (n|no) ]] é falho porque o if deve estar fora dos colchetes, mas supondo que seja um erro de digitação em sua pergunta, ele será bem-sucedido se a resposta contiver um n . É provável que você queira as âncoras de início e fim para que somente n ou no correspondam.

    
por 25.03.2018 / 00:46

Tags