Fish 3.3.1 shell:如何否定字符串匹配的结果?

Fish 3.3.1 shell:如何否定字符串匹配的结果?

如上。

基本上我想实现类似的东西

if not match then
  do these things
else
  do these other things
fi

谢谢

答案1

这取决于您所说的匹配的含义,但如果您的意思是“完全匹配”,则可以使用string match带有简单参数的内置函数。

if not string match --quiet -- "some_string" $some_argument
    echo no match
else
    echo match
end

要在字符串内进行匹配,您可以使用 glob insome_string或正则表达式 with string match --regex

答案2

作为替代not string match -q -- $pattern $string(如@Zanchey 提到),你还可以这样做:

if string match -vq -- $pattern $string
  echo no match
else
  echo match
end

-v如 in grep, 或--invert(如 GNUgrep--invert-match)来反转匹配)。

当将模式与多个字符串匹配时(例如$string上面是一个包含多个元素的列表)或与根本没有字符串匹配时($string是一个空列表),您会看到差异。

if not string match -q -- $pattern $string1 $string2
  echo none of the strings matched
else
  echo at least one the strings matched
end
if string match -vq -- $pattern $string1 $string2
  echo at least one of the strings did not match
else
  echo all the strings matched
end

相关内容