Bash регулярное выражение с дефисом и точкой - PullRequest
2 голосов
/ 27 марта 2019

Я пытаюсь сопоставить имя хоста с регулярным выражением.По какой-то причине следующий код не работает.

#!/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]$

1 Ответ

3 голосов
/ 27 марта 2019

Шаблон, который вы используете, является ошибочным из-за "экранированных" символов и того факта, что - не находится в конце / начале выражения в скобках.\ всегда рассматривается как буквенная обратная косая черта внутри скобочных выражений, они не образуют escape-последовательности.Дефис сложный, см. 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}.

...