string=123456
if [ $string == 123456 ]; then
echo 123
fi
Das funktioniert gut, aber wenn ich == zu = ~ wechsle, bekomme ich folgenden Fehler:
./test: line 3: [: =~: binary operator expected
123456
eine gültige RE
string=123456
if [ $string == 123456 ]; then
echo 123
fi
Das funktioniert gut, aber wenn ich == zu = ~ wechsle, bekomme ich folgenden Fehler:
./test: line 3: [: =~: binary operator expected
123456
eine gültige RE
Antworten:
Bash ‚s Regex Matching funktioniert nur in doppelten eckigen Klammern[[ ... ]]
:
string=123456
if [[ "$string" =~ 123456 ]]; then echo 123; fi
123
[[ ... ]]
, da dort keine Wortteilung oder Pfadnamenerweiterung erfolgt. Sie werden nur benötigt, wenn einzelne Klammern [ ... ]
(auf beiden Seiten) und rechts von der doppelten Klammer verwendet werden.
=~
ist in diesem Fall falsch.=~
vergleicht das Muster (linke Seite der Aufgabe) mit einem regulären Ausdruckregex
auf der rechten Seite des Assinments. Ein regulärer Ausdruck in seiner einfachsten Form wird übergeben wie'[0-9][0-9]'