Как установить глобальные переменные среды для всех служб?

Если вы используете bashвыпуск 4.0 или новее...

CODE=A

declare -A domain

domain=(
   [a]=com.tencent.ig
   [b]=com.vng.pubgmobile
   [c]=com.pubg.krmobile
   [d]=com.rekoo.pubgm
)

PN=${domain[${CODE,,}]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}

В коде я определяю ассоциативный массив, содержащий все доменные имена, каждое из которых связано с одной буквой нижнего -регистра.

Переменной $PNприсваивается доменное имя, соответствующее нижнему -прописному $CODEзначению(${CODE,,}возвращает значение $CODE, переведенное в строчные буквы только )из этого массива, но если $CODEне соответствует действительной записи в списке domain, он завершает работу сценария с ошибкой.

Подстановка параметра ${variable:?error message}будет расширяться до значения$variable(соответствующего домена в коде ), но приведет к выходу из сценария с сообщением об ошибке, если значение пусто и недоступно. Вы не получите точно такой же формат сообщения об ошибке, как в вашем коде, но по существу он будет вести себя так же, если $CODEнедействителен:

$ bash script.sh
script.sh: line 12: domain[${CODE,,}]: ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS

Если вам небезразлично количество символов, мы можем еще больше сократить:

CODE=A
declare -A domain=( [a]=tencent.ig [b]=vng.pubgmobile [c]=pubg.krmobile [d]=rekoo.pubgm )
PN=com.${domain[${CODE,,}]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}

Помимо удаления ненужных новых строк, я также удалил com.из каждого домена (, вместо этого он добавлен в назначение дляPN).

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


Если бы $CODEбыл числовым (нулевым -основанным )индексом,это немного упростило бы код:

CODE=0

domain=( com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm )
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}

Это дополнительно упростило бы чтение массива domainиз вспомогательного файла, содержащего по одной записи в строке:

CODE=0

readarray -t domain <domains.txt
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
0
08.08.2021, 15:50
0 ответов

Теги

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