IF оператор для изменения значения переменной - PullRequest
0 голосов
/ 12 апреля 2020

У меня нижеприведенная логика c в скрипте, которая просматривает значение переменной "LIVE_ALIAS", чтобы увидеть, имеет ли она значение -A. Если это так, то предполагается, что значение -A меняется на -B.

Когда я запускаю свой код, выводом LIVE_ALIAS будет DEV-A, поэтому мои логики c "должны" изменить -A на -B Однако в журнале моей работы я вижу, что выполняется оператор else, и значение остается как -A и не изменяется. Есть ли что-то, чего мне не хватает в разделе 'then' предложения if, которое заставляет его не выполняться?

Стоит отметить, что LIVE_ALIAS - это DEV-B, скрипт работает нормально и устанавливает STAGING_ALIAS до DEV-A

      if [ "${LIVE_ALIAS}" = *"-A"* ]
    then
      STAGING_ALIAS=$(echo "${LIVE_ALIAS}" | sed 's/-A/-B/g')
    else
      STAGING_ALIAS=$(echo "${LIVE_ALIAS}" | sed 's/-B/-A/g')
  fi





> + LIVE_ALIAS=DEV-A
> + [ DEV-A = *-A* ]
> + echo DEV-A
> + sed s/-B/-A/g
> + STAGING_ALIAS=DEV-A


+ LIVE_ALIAS=DEV-B
+ [ DEV-B = *-A* ]
+ echo DEV-B
+ sed s/-B/-A/g
+ STAGING_ALIAS=DEV-A

Ответы [ 3 ]

1 голос
/ 12 апреля 2020

Здесь вы можете сопоставить регулярное выражение, но вам нужно заключить условие в две скобки. Например:

LIVE_ALIAS="DEV-A"

if [[ "$LIVE_ALIAS" =~ -A ]]
    then
        STAGING_ALIAS=$(echo "$LIVE_ALIAS" | sed 's/-A/-B/g')
    else
        STAGING_ALIAS=$(echo "$LIVE_ALIAS" | sed 's/-B/-A/g')
fi

Это должно работать в SH, BASH и ZSH.

1 голос
/ 12 апреля 2020

Если вы используете Bash встроенный RegEx, сделайте это полностью:

#!/usr/bin/env bash

LIVE_ALIAS="DEV-A"

if [[ $LIVE_ALIAS =~ (.+-)([AB]) ]]; then
  if [[ ${BASH_REMATCH[2]} == "A" ]]; then
    STAGING_ALIAS="${BASH_REMATCH[1]}B"
  else
    STAGING_ALIAS="${BASH_REMATCH[1]}A"
  fi
fi

(.+-)([AB]): захватывает радикал одного или более любых символов, за которыми следует da sh в BASH_REMATCH[1] и захватывает суффикс A или B в BASH_REMATCH[2].

Затем, в зависимости от суффикса, сохраняет радикальную часть с BASH_REMATCH[1] и переключает суффикс с A → B или B → A.

1 голос
/ 12 апреля 2020

Сравнение шаблонов глобуса доступно только для bash специального оператора [[:

LIVE_ALIAS="DEV-A"
if [[ "${LIVE_ALIAS}" = *-A* ]]; then
    STAGING_ALIAS=$(echo "${LIVE_ALIAS}" | sed 's/-A/-B/g')
else
    STAGING_ALIAS=$(echo "${LIVE_ALIAS}" | sed 's/-B/-A/g')
fi
echo $STAGING_ALIAS

, который выводит DEV-B.

...