使用GNU bash (版本4.0.35(1)-release (x86_64-suse-linux-gnu) ),我想否定一个使用正则表达式的测试。例如,我希望有条件地将路径添加到path变量,如果该路径尚未存在,则如下所示:
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
我确信有一百万种方法可以做到这一点,但我想知道的是,条件条件是否可以以某种方式被否定,比如(the erroneous):
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
发布于 2010-12-28 08:00:13
你说得对,就像if ! [[
一样,在!
和[[
之间加一个空格
发布于 2010-12-28 10:17:07
您还可以将感叹号放在括号内:
if [[ ! $PATH =~ $temp ]]
但你应该锚定你的模式,以减少误报:
temp=/mnt/silo/bin
pattern="(^|:)${temp}(:|$)"
if [[ ! "${PATH}" =~ ${pattern} ]]
它在开头或结尾查找前面或后面有冒号的匹配项(或两者都有)。我建议使用小写或大小写混合的变量名作为习惯,以减少与shell变量的名称冲突的机会。
发布于 2011-10-21 15:32:39
最安全的方法是把!对于[[ ]]
中的正则表达式否定,如下所示:
if [[ ! ${STR} =~ YOUR_REGEX ]]; then
否则,它可能会在某些系统上失败。
https://stackoverflow.com/questions/4542732
复制相似问题