Bash

bash:if 表達式中的正則表達式

  • August 2, 2014

在我的 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 應該只在前面有一個空格字元。

bash3.2 或更高版本中:

shopt -u compat31
[[ ! $DEBUG_PACKAGE_LIST =~ [^-[:alnum:]]'libmagick++5-dbg' ]];

bash3.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 對 使用擴展的正則表達式=~其中+是一個特殊字元。

引用自:https://unix.stackexchange.com/questions/147843