On Fri, Sep 06, 2019 at 11:39:06PM +0500, JohnS wrote: > Hi, all! > > Why next construction doesn't work? > > read x; while [ "$x" != [abc] ]; do echo "Not a, b or c"; break; done > > I tried many variants but can't make it work. Moreover I don't understand WHY > it > doesn't work?! > > Thanks!
The shells in the OpenBSD base system do not support matching regular expressions with that syntax. You may have been thinking of bash, while [[ ! $x =~ [abc] ]]; do ...; done Or, in ksh, while [[ $x != [abc] ]]; do ...; done Here however, [abc] is not a regular expression, but a filename globbing pattern, and the test will test for equality rather than trying to match a substring (as would be the case with a regular expression match). Note that this test requries [[ ... ]] rather than [ ... ]. See the ksh(1) manual.