在我的 ubuntu 机器上的脚本中,我声明了一个如下的字符串:
DEBUG_PACKAGE_LIST=$(apt-cache search dbg | awk '{ print $1 }' | grep -e "-dbg")
帮助您理解我的问题这里的输出是
echo $DEBUG_PACKAGE_LIST >> debug
下列
if [[ ! $DEBUG_PACKAGE_LIST =~ "[^-a-z0-9]libmagick++5-dbg[a-z]*" ]]; then
echo "no contained";
fi
回显“不包含”,尽管$DEBUG_PACKAGE_LIST
包含字符串“libmagick++5-dbgsym”。你能帮我理解为什么吗?
基本上我的目的是匹配 libmagick++5-dbg,而 libmagick 前面只能有一个空格字符。
答案1
在bash
3.2 或更高版本中:
shopt -u compat31
[[ ! $DEBUG_PACKAGE_LIST =~ [^-[:alnum:]]'libmagick++5-dbg' ]];
在bash
3.1中:
[[ ! $DEBUG_PACKAGE_LIST =~ '[^-[:alnum:]]libmagick\+\+5-dbg' ]];
(请注意,这[a-z]*
是多余的,因为它也匹配空字符串,因此将始终匹配)。
适用于以下两种情况:
re='[^-[:alnum:]]libmagick\+\+5-dbg'
[[ ! $DEBUG_PACKAGE_LIST =~ $re ]]
答案2
答案3
您可以使用 shell 模式而不是正则表达式来完成此操作。在字符串前面添加一个空格,这样您就不需要将第一个元素与其他元素区别对待。
if [[ " $DEBUG_PACKAGE_LIST" = *\ libmagick++5-dbg[a-z]* ]]; then
(您确定后面的必填字母吗-dbg
?包名以 结尾-dbg
。)