mrjayviper Asked: 2022-02-05 19:03:10 +0800 CST2022-02-05 19:03:10 +0800 CST 2022-02-05 19:03:10 +0800 CST Fish 3.3.1 shell:如何否定字符串匹配的结果? 772 如上。 基本上我想实现类似的东西 if not match then do these things else do these other things fi 谢谢 fish 2 个回答 Voted Best Answer Zanchey 2022-02-05T20:58:04+08:002022-02-05T20:58:04+08:00 这取决于你所说的匹配是什么意思,但如果你的意思是“完全匹配”,你可以使用string match带有普通参数的内置函数。 if not string match --quiet -- "some_string" $some_argument echo no match else echo match end 要在字符串中匹配,您可以使用 glob insome_string或带有 的正则表达式string match --regex。 Stéphane Chazelas 2022-02-06T03:30:53+08:002022-02-06T03:30:53+08:00 作为not string match -q -- $pattern $string(如@Zanchey 所述)的替代方案,您还可以执行以下操作: if string match -vq -- $pattern $string echo no match else echo match end (-v如 ingrep或--invert(如 GNU grep's --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
这取决于你所说的匹配是什么意思,但如果你的意思是“完全匹配”,你可以使用
string match
带有普通参数的内置函数。要在字符串中匹配,您可以使用 glob in
some_string
或带有 的正则表达式string match --regex
。作为
not string match -q -- $pattern $string
(如@Zanchey 所述)的替代方案,您还可以执行以下操作:(
-v
如 ingrep
或--invert
(如 GNUgrep
's--invert-match
)反转匹配)。当将模式与多个字符串匹配时(例如,当
$string
上面是一个包含多个元素的列表时)或根本不匹配任何字符串($string
是一个空列表)时,您会看到不同之处。