Вы путаете две вещи.
Запуск bash
как bash -v
запустит оболочку bash
, в которой установлена опция оболочки set -v
(set -o verbose
). Это эквивалентно bash -o verbose
иbash --verbose
(одному из немногих параметров оболочки, который имеет эквивалент длинного параметра ). Можно установить любую из опций abefhkmnptuvxBCHP
, используя их отдельные буквы или используя -o
и их длинное имя непосредственно при запуске bash
, например. bash -x
и bash -o xtrace
.
Я предполагаю, что -v varname
происходит из описания встроенной команды -в test
, которая может проверить, установлена ли переменная с помощью test -v varname
или [ -v varname ]
.
См. руководство bash
или help set
и help test
в bash
.
Длинные варианты для bash
нельзя сокращать.
Хорошо, вроде работает:
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]+
...