Por exemplo, se este for o meu script:
if [[ $yesno == "What's going on" ]]; then
Então, como faço para ignorar '
, e ?
, por exemplo?,
.
Então, basicamente Whats going on
, What's going on
, What's going on?
e What's going on.
parecem todos a mesma coisa. Eu sei que posso || [[ $yesno == ".. ]]
combinar múltiplas variáveis, mas não consigo digitar todas as combinações.
Responder1
Se você quiser apenas que seus exemplos específicos funcionem, você pode usar uma correspondência bash regexp
[[ $yesno =~ What\'?s\ going\ on[.?]? ]]
onde escapamos com barra invertida a citação e os espaços.
Responder2
Você pode simplesmente remover todos os caracteres além dos alfanuméricos em sua variável antes da comparação:
$ yesno="What's going on?"
$ if [[ ${yesno//[^a-zA-Z0-9\ ]/} == "Whats going on" ]]; then echo "OK";fi
OK
Responder3
Uma das maneiras mais comuns e universais de fazer isso seria canalizar a string grep
e verificar grep
o código de retorno de . A if
instrução pode verificar o código de saída de qualquer comando ou pipeline:
if echo "$yesno" | grep -q "What'*s *going *on[?.]*"; then
Além dos caracteres que você mencionou, também permite 0 ou mais espaços entre as palavras.
Esta construção deve funcionar no OS X, FreeBSD, GNU/Linux e qualquer outro sistema que forneça grep POSIX: