Условные символы в Shell Globbing - Bash / Zsh - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь получить оператор case, соответствующий одному из четырех входов в оболочке Bash / Zsh:

  1. v
  2. -v
  3. версия
  4. - версия

Вы видите, куда я иду, верно?

Я ищу это в приведенном ниже выражении:

case "$1" in
  ?(--)version|?(-)v)
    # do stuff
  ;;
esac

И я считаю, что это не работает. Из того, что я прочитал,? (Шаблон) - как сопоставить 0 или одно вхождение шаблона.

У меня все получилось, сопоставив регистр

--version|version|-v|v)

Но было бы неплохо иметь что-то более аккуратное, плюс, это опыт обучения!

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

Любой совет?

1 Ответ

0 голосов
/ 12 марта 2019

Чтобы дать ответ на этот вопрос, лучшее решение (если вы настаиваете на использовании какой-либо формы сглаживания):

(|--)version|(|-)v )

Но, как правильно заметил @kvantour, этогораздо лучше просто придерживаться более простого:

--version|version|-v|v )

...