Смешивание регулярного выражения и другого условного выражения в операторе bash if - PullRequest
0 голосов
/ 16 марта 2010

Я не могу обойти это довольно долго. Читая руководства и учебники, я все больше путаюсь. Я хочу оператор if со следующей логикой:

if [ -n $drupal_version ] && [[ "$drupal_version" =~ DRUPAL-[6-9]-[1-9][1-9] ]]; then

но я не могу заставить его работать должным образом.

Когда сценарий оценивается с использованием конструкции сценария "bash -x ...", он работает нормально, но когда он запускается как обычный сценарий, мое выражение не оценивается (даже если вышеупомянутое условие должно быть выполнено, иначе выполняется часть) .

Не могли бы вы помочь?

Ответы [ 2 ]

0 голосов
/ 16 марта 2010

Спасибо всем за ваши ответы. Двойные скобки]] - это конструкция, специфичная для bash, которая, в свою очередь, требует, чтобы первая строка вашего скрипта указывала на #! / Bin / bash вместо #! / Bin / sh, как это сделал мой. Поменял эту строку и все работает.

0 голосов
/ 16 марта 2010

вы можете использовать case/esac, без регулярных выражений. можно использовать в bash <3.2 </p>

if [ -n "$drupal_version" ] ;then
  case "$drupal_version" in
   DRUPAL-[6-9]-[1-9][1-9]) 
      echo "found"
      ;;
   *) 
      echo "version not correct"
      ;;
  esac
fi

однако, если вы хотите регулярное выражение, обратите внимание, что =~ не =

[[ $drupal_version =~ DRUPAL-[6-9]-[1-9][1-9] ]] && echo "found"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...