如何否定 Bash 的正则表达式匹配运算符

Mou*_*inX 1 bash regular-expression pattern-matching

Bash 有=~正则表达式匹配操作符。下面是一个使用它的例子:

#!/bin/bash

input=$1


if [[ "$input" =~ "[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]" ]]
#                 ^ NOTE: Quoting not necessary, as of version 3.2 of Bash.
# NNN-NN-NNNN (where each N is a digit).
then
  echo "Social Security number."
  # Process SSN.
else
  echo "Not a Social Security number!"
  # Or, ask for corrected input.
fi
Run Code Online (Sandbox Code Playgroud)

对于否定,我见过的所有例子都依赖于一个else子句。对于我对否定匹配感兴趣的情况,有没有更好的方法来制作非功能性if子句?

例如,如果我只关心上述输入不是非社会安全号码的情况,那么正确的方法是什么?

l0b*_*0b0 5

您可以在顶层否定:

if ! [[ …
Run Code Online (Sandbox Code Playgroud)