string=123456
if [ $string == 123456 ]; then
echo 123
fi
Działa to dobrze, ale jeśli zmienię == na = ~ otrzymuję ten błąd:
./test: line 3: [: =~: binary operator expected
123456
jest poprawnym RE
string=123456
if [ $string == 123456 ]; then
echo 123
fi
Działa to dobrze, ale jeśli zmienię == na = ~ otrzymuję ten błąd:
./test: line 3: [: =~: binary operator expected
123456
jest poprawnym RE
Odpowiedzi:
Bash „s regex dopasowywania działa tylko w podwójnych nawiasach kwadratowych[[ ... ]]
:
string=123456
if [[ "$string" =~ 123456 ]]; then echo 123; fi
123
[[ ... ]]
, ponieważ nie występuje tu dzielenie słów ani rozwijanie nazw ścieżek. Są one potrzebne tylko w przypadku używania pojedynczych nawiasów [ ... ]
(po obu stronach) i po prawej stronie wyrażenia podwójnego nawiasu.
=~
jest w tym przypadku nieprawidłowe.=~
porównuje tupot (lewa strona zadania) z regularną ekspresjąregex
po prawej stronie zadania. Wyrażenie regularne w najprostszej formie jest przekazywane jak'[0-9][0-9]'