bash:if式の正規表現

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_LISTechoは、「libmagick ++ 5-dbgsym」文字列が含まれていても「含まない」を示します。理由を理解するのに役立ちますか?

デフォルトでは、私の目標はlibmagick ++ 5-dbgを一致させることであり、libmagickの前に空白文字が1つしかないことです。

ベストアンサー1

バージョンbash3.2以降:

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

bash3.1から:

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

(これは[a-z]*空の文字列とも一致するため、重複するため常に一致します。)

次の2つの状況に適用できます。

re='[^-[:alnum:]]libmagick\+\+5-dbg'
[[ ! $DEBUG_PACKAGE_LIST =~ $re ]]

おすすめ記事