How do I negate a test with regular expressions in a bash script? How do I negate a test with regular expressions in a bash script? bash bash

How do I negate a test with regular expressions in a bash script?


You had it right, just put a space between the ! and the [[ like if ! [[


You can also put the exclamation mark inside the brackets:

if [[ ! $PATH =~ $temp ]]

but you should anchor your pattern to reduce false positives:

temp=/mnt/silo/binpattern="(^|:)${temp}(:|$)"if [[ ! "${PATH}" =~ ${pattern} ]]

which looks for a match at the beginning or end with a colon before or after it (or both). I recommend using lowercase or mixed case variable names as a habit to reduce the chance of name collisions with shell variables.


the safest way is to put the ! for the regex negation within the [[ ]] like this:

if [[ ! ${STR} =~ YOUR_REGEX ]]; then

otherwise it might fail on certain systems.