Veja isso se o bloco:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
Isso deve ser impresso "correspondido", mas não. Onde eu estou errando?
Veja isso se o bloco:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
Isso deve ser impresso "correspondido", mas não. Onde eu estou errando?
Respostas:
Você precisa remover a citação na correspondência de regex.
if [[ ${str} =~ m\.m ]]; then
Na página do manual do bash:
[...] Um operador binário adicional, = ~, está disponível, com a mesma precedência que == e! =. Quando usada, a corda à direita do operador é considerada uma expressão regular estendida e é correspondida de acordo (como na regex (3)). O valor de retorno é 0 se a sequência corresponder ao padrão e 1 caso contrário. Se a expressão regular estiver sintaticamente incorreta, o valor de retorno da expressão condicional será 2. Se a opção de concha nocasematch estiver ativada, a correspondência será realizada sem considerar o caso de caracteres alfabéticos. Qualquer parte do padrão pode ser citada para forçá-lo a corresponder como uma sequência.
Portanto, com as aspas, você está usando a correspondência de cordas antiga.
Se você precisar de espaços no padrão, basta escapar deles:
str="m m"
if [[ ${str} =~ m\ +m ]]; then
\
.
${str} =~ "needle"[0-9]{1}
ou devo usar ${str} =~ needle[0-9]{1}
?