簡體   English   中英

帶連字符和點的 Bash 正則表達式

[英]Bash regex with hyphen and dot

我正在嘗試將主機名與正則表達式匹配。 由於某種原因,以下代碼失敗。

#!/bin/bash 
CONFIGURATION=m1si-ngxi-ddb01

#check configuration format
TMP_CONFIGURATION=",${CONFIGURATION}"
re=',[a-zA-Z0-9\-_\.]+'
if ! [[ $TMP_CONFIGURATION =~ $re ]]
then
        echo "configuration parttern mismatch."
        exit 1
fi

測試:

[oracle@m1s-nyyy-db01 nir]$ vi a.sh
[oracle@m1s-nyyy-db01 nir]$

由於“轉義”字符以及-不在括號表達式的末尾/開頭,您擁有的模式失敗。 \\始終被視為括號表達式內的文字反斜杠,它們不形成任何轉義序列。 連字符很棘手,請參閱9.3.5 RE 括號表達式,第 7 點:

如果<hyphen-minus>字符在列表中最先出現(如果有的話,在初始的 '^' 之后)或最后出現,或者作為范圍表達式中的結束范圍點,則應將其視為自身。

采用

CONFIGURATION=m1si-ngxi-ddb01
#check configuration format
TMP_CONFIGURATION=",$CONFIGURATION"
re=',[a-zA-Z0-9_.-]+'
if ! [[ $TMP_CONFIGURATION =~ $re ]]
then
        echo "configuration parttern mismatch."
        exit 1
fi

請參閱在線演示 請注意,無需將CONFIGURATION放在花括號內, $CONFIGURATION = ${CONFIGURATION}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM