Я пишу сценарий и хочу проверить переменную на предмет формата. Я использую эту функцию:

check_non_numeric() {
    #re='^\".*\"$'
    re='\[^\]*\'
    if ! [[ $1 =~ $re ]] ; then
        echo "'$1' is not a valid format - \"[name]\" "
        exit 1
    fi
}

Я хочу, чтобы регулярное выражение соответствовало строке с чем угодно, кроме кавычек внутри и кавычек вокруг нее («a», «строка» или «dsfo! ^ $ ** #»). Проблема в том, что эти регулярные выражения, которые я придумал, мне не подходят. Я использовал очень похожую функцию, чтобы проверить, является ли переменная целым числом или с плавающей запятой, и там она работала. Не могли бы вы сказать мне, каким должно быть рассматриваемое регулярное выражение?

Большое спасибо

0
Jesse_Pinkman 8 Май 2016 в 23:21

3 ответа

Лучший ответ

Я предполагаю, что вы имели в виду, что хотите сопоставить все, что не является строкой, заключенной в кавычки. Проще сопоставить, используя ваше регулярное выражение для сопоставления, и bash-test, чтобы «не» сопоставить его - если это не ясно, используйте !. Вот несколько способов сделать это.

if [[ ! $(expr "$string" : '\".*\"') -gt 0 ]]; then echo "expr good"; fi

if [[ ! "$string" =~ \".*\" ]]; then echo "test good"; fi

Убедитесь, что вы цитируете тестируемую вами переменную с помощью expr (которая предназначена только для назидания).

1
SaintHax 9 Май 2016 в 13:14

Поскольку вы хотите сопоставить что-либо, кроме строки с кавычками, вы просто нацеливаетесь на кавычки:

re='["]'
if [[ ! $1 =~ $re ]] ; then

На самом деле для этого вам не нужно регулярное выражение. Достаточно будет глобусов:

if [[ ! $1 = *\"* ]]; then
...
fi
1
Jahid 8 Май 2016 в 20:54

Ваше регулярное выражение очень и очень далеко. \[ соответствует буквальной левой квадратной скобке, а ^ (вне класса символов) соответствует началу строки.

Что-то вроде '^"[^"]*"' должно сработать, если вы действительно этого хотите.

Однако я в этом немного сомневаюсь. Чтобы передать значение в буквальных двойных кавычках, вам понадобится что-то вроде

yourprogram '"value"'

Или

yourprogram "\"value\""

Чего я, конечно, хотел бы избежать, если бы я был вами.

0
tripleee 9 Май 2016 в 17:26