Bash
bash:if 表達式中的正則表達式
在我的 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 應該只在前面有一個空格字元。
在
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 ]]
**您不能引用**此類表達式右側的正則表達式(除非您使用的是Bash 版本>= 3.0-alpha 和 < 3.2-alpha)。如果這樣做,它會被視為文字字元串之間的比較。
此外,Bash 對 使用擴展的正則表達式,
=~
其中+
是一個特殊字元。