bash 中的不等波浪号
Posted
技术标签:
【中文标题】bash 中的不等波浪号【英文标题】:The Not Equal Tilde in bash 【发布时间】:2014-07-15 03:40:35 【问题描述】:如标题所示,
"=~"
operator的相反是什么?
我真的在谷歌上搜索过,我只资助了以下解决方案:[[ ! $str1 =~ $str2 ]]
有没有运营商验证"=~"
operator的相反?
谢谢。
【问题讨论】:
为什么需要它?! (X =~ Y)
还不够吗?
如果操作员准备好退出,我为什么要使用它?
@Rhymoid 不,我的意思是! X >= Y
:)
@user2799037 这就是问题所在,我不是唯一一个使用我的代码的人,我必须最大限度地优化......
@user3629514:对于正则表达式,拥有一个专用的非匹配运算符不会优化任何东西。
【参考方案1】:
在 4.3 版之前的 bash 中没有对立的运算符(在本文发布时为当前版本)。
[[ ! str1 =~ str2 ]]
是要走的路。
对于此类问题,您应该使用man
而不是您最喜欢的搜索引擎。所涉及工具的手册页——在这种情况下是 bash——是权威的,“网络是传闻”(当然,除非它引导您进入手册页 ;-))。
【讨论】:
【参考方案2】:答案是 no such Operator in bash 如果您不想使用已知的 ( [[ ! $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 ]]
成为最好的。
【讨论】:
嗯...调用外部进程几乎没有改进,无论是性能还是可读性。以上是关于bash 中的不等波浪号的主要内容,如果未能解决你的问题,请参考以下文章