在bash脚本中,如何使用正则表达式否定一个测试?

31 浏览
0 Comments

在bash脚本中,如何使用正则表达式否定一个测试?

使用GNU bash(版本4.0.35(1)-release (x86_64-suse-linux-gnu)),我想要通过正则表达式来否定一个测试。例如,如果路径不存在,我想要有条件地将一个路径添加到PATH变量中,代码如下:\n

TEMP=/mnt/silo/bin
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/Scripts:
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/local/bin
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
export PATH

\n我确信有很多种方法可以实现这个,但我想知道是否可以以某种方式否定条件,如下所示(错误的方式):\n

TEMP=/mnt/silo/bin
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/Scripts:
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/local/bin
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
export PATH

0
0 Comments

如何在bash脚本中使用正则表达式来否定一个测试?

在bash脚本中,使用正则表达式来执行条件测试是常见的需求。通常,可以使用`=~`运算符来判断一个字符串是否符合某个正则表达式。但是,有时我们需要对测试结果进行否定,即判断一个字符串是否不符合某个正则表达式。

一个常见的错误做法是直接在正则表达式前加上`!`符号,如下所示:

if ! [[ ${STR} =~ YOUR_REGEX ]]; then

然而,这种写法在某些系统上可能会导致错误。为了确保在所有系统上都能正常工作,最安全的做法是将`!`符号放在`[[ ]]`内部,如下所示:

if [[ ! ${STR} =~ YOUR_REGEX ]]; then

这样,就能正确地判断一个字符串是否不符合某个正则表达式。

通过将`!`符号放在`[[ ]]`内部,我们可以避免在某些系统上出现错误。这是因为在某些系统中,`[[ ]]`条件判断语句内部的`!`符号有特殊的含义,会导致正则表达式匹配失败。

总结起来,使用`[[ ! ${STR} =~ YOUR_REGEX ]]`的形式可以在bash脚本中正确地否定一个正则表达式测试。这种写法可以确保在所有系统上都能正常工作,避免了因特殊字符导致的错误。

0
0 Comments

问题的原因是作者想要在bash脚本中使用正则表达式来否定一个测试。他尝试了几种方法,包括将感叹号放在方括号内以及使用锚定模式来减少错误的匹配。他提到了使用小写或混合大小写的变量名称以避免与shell变量发生名称冲突的建议。

解决方法是将感叹号放在方括号内,并使用锚定模式来限定匹配的开头和结尾。作者建议使用小写或混合大小写的变量名称,并解释了为什么不需要将变量名称大写。

最后,作者提到他认为if [[ ! $foo =~ bar ]]if ! [[ $foo =~ bar ]]更安全,因为它更容易引入更多的条件到if语句中。

0
0 Comments

在bash脚本中,有时候需要使用正则表达式来进行测试。然而,有时候需要对测试进行否定,即如果测试条件不满足,则执行某些操作。本文将讨论如何在bash脚本中使用正则表达式进行测试的否定。

问题的出现是因为一些人在使用否定测试时遇到了困惑。初学者可能会错误地将否定操作符'!'放置在双方括号'[[ ]]'内部,而实际上应该将其放在外部。正确的写法是'if ! [[ condition ]]'。

以下是一些关于这个的问题:

一位用户提到,他最初写的条件是正确的,只是在'!'和'[[ ]]'之间没有加空格。他建议在两者之间添加一个空格,即'if ! [[ condition ]]'。

另一位用户抱怨说,在处理bash脚本时经常遇到各种特殊字符的问题,而他之前以为只有perl会有这种问题。他表示感到困惑,不知道如何正确放置否定操作符。他感到害怕,好像被一条蟒蛇勒住了肚子。

还有一位用户问是否总是将'!'放在'[[ ]]'之前,而不是在内部,例如'if [[ ! condition ]]。他举了一个例子,说Sublime Text在将'!'放在外部时会显示奇怪的高亮。他还提到,IntelliJ会给出一个警告,提示需要在'!'后面加上一个空格。

最后,有一位用户回答说,确实应该将'!'放在'[[ ]]'之前,而不是在内部。他还指出,其实你也可以将'!'放在双方括号内,只是他个人更喜欢将其放在外部。

要在bash脚本中使用正则表达式进行测试的否定,应该将否定操作符'!'放在双方括号'[[ ]]'之前,并在两者之间加上一个空格。这样可以确保条件测试的正确性,并避免出现一些奇怪的问题。

0