Как отменить регулярное выражение с помощью теста

Вы путаете две вещи.

  1. Запуск bashкак bash -vзапустит оболочку bash, в которой установлена ​​опция оболочки set -v(set -o verbose). Это эквивалентно bash -o verboseиbash --verbose(одному из немногих параметров оболочки, который имеет эквивалент длинного параметра ). Можно установить любую из опций abefhkmnptuvxBCHP, используя их отдельные буквы или используя -oи их длинное имя непосредственно при запуске bash, например. bash -xи bash -o xtrace.

  2. Я предполагаю, что -v varnameпроисходит из описания встроенной команды -в test, которая может проверить, установлена ​​ли переменная с помощью test -v varnameили [ -v varname ].

См. руководство bashили help setи help testв bash.

Длинные варианты для bashнельзя сокращать.

0
11.03.2020, 09:18
1 ответ

Хорошо, вроде работает:

if [[ ! "$dimension" =~ [0-9]+x[0-9]+ ]]; then
 echo 'wtf meng, the dimension needs an "x" in it.'
 exit 1;
fi

но мне интересно, почему заключение в одинарные -кавычки не работает:

if [[ ! "$dimension" =~ '[0-9]+x[0-9]+' ]]; then
 echo 'wtf meng, the dimension needs an "x" in it.'
 exit 1;
fi

вот мое решение:

dimension="3x5"

regex='[0-9]+x[0-9]+'

if [[ ! "$dimension" =~ $regex ]]; then
 echo 'wtf meng, the dimension needs an "x" in it.'
 exit 1;
fi

Теперь регулярное выражение можно заключать в одинарные кавычки, но следует избегать двойных кавычек при обращении к $regex из [[ ]]. Однако мне все еще любопытно, есть ли сокращение для [0-9]+...

-1
28.04.2021, 23:20

Теги

Похожие вопросы