问题 bash中的Not Equal Tilde


喜欢在标题中提到, 什么是 对面 的 "=~"  操作者? 我真的用Google搜索,我只资助以下解决方案: [[ ! $str1 =~ $str2 ]] 有没有运营商验证 对面 的 "=~"  操作者

谢谢。


8538
2018-05-26 11:17


起源

你为什么需要它?不 ! (X =~ Y) 足够了?
如果操作员准备退出,为什么我会使用它? - Armageddon
@Rhymoid我猜 ! X > Y 写得足够好但写得更好 X < Y。 - Tom Fenech
@Rhymoid不,我的意思 ! X >= Y :) - Tom Fenech
@ user3629514:对于正则表达式,拥有专用的非匹配运算符不会优化任何内容。


答案:


bash版本4.3中没有对手操作员(本帖时的当前版本)。

[[ ! str1 =~ str2 ]] 是要走的路。

对于这些问题,你应该使用 man 而不是你最喜欢的搜索引擎。涉及的工具的手册页 - 在这种情况下是bash - 是权威的,'网络是传闻(当然,除非它引导你到手册页;-))。


8
2018-05-26 12:54





答案是有的 在bash中没有这样的运算符 哪个呢 !~ 因为它在perl中,如果你不想使用已知的 ( [[ ! $str1 =~ $str2 ]] ) 为了这个目的,你必须使用 grep 要么 perl 。就像是:

x="I like negation"
y="like"


if [[ $(perl -ne "!/$y/ && print" <(echo $x)) == "$x" ]]; then 
echo "Contains"
else
echo "Doesn't contain"

但我没有找到任何理由错过 !~ 在bash中 [[ ! $str1 =~ $str2 ]] 很好地解决了这个目的。可能是因为它不存在于bash中。

考虑一下DevSolar对这个答案的第一个评论,它适用于你什么时候去 grep 要么 perl,这再次成就 [[ ! $str1 =~ $str2 ]] 最好的可用。


2
2018-05-26 13:06



嗯......称外部过程几乎不是改进,无论是性能还是可读性。 - DevSolar