Как добавить ключ env и значения в словаре для скрипта bash - PullRequest
0 голосов
/ 08 октября 2019

У меня есть две переменные env

SMTP_PASSWORD=SMTP_PASSWORD_KEY
MICROSCANNER_TOKEN=MICROSCANNER_TOKEN_KEY

Мне нужно добавить это к dict, используя bash

например: arr ["SMTP_PASSWORD"] = SMTP_PASSWORD_KEY

ключ и значение должны быть взяты из env

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

За пределами вашего скрипта:

export SMTP_PASSWORD=mySMTPKey
export MICROSCANNER_TOKEN=myMicroscannerKey

Внутри вашего скрипта:

Как отдельные переменные:

#!/bin/bash
SMTP_PASSWORD=${SMTP_PASSWORD_KEY}
MICROSCANNER_TOKEN=${MICROSCANNER_TOKEN_KEY}

Как карта (доступно в Bash 4):

#!/bin/bash
declare -A MYMAP 
MYMAP[SMTP_PASSWORD]=${SMTP_PASSWORD_KEY}
MYMAP[MICROSCANNER_TOKEN]=${MICROSCANNER_TOKEN_KEY}

Чтобы перебрать внешний ENV и добавить пары ключ / значение:

#!/bin/bash
declare -A MYMAP
while IFS='=' read -r -d '' n v; do
    MYMAP[${n}]=${v}
done < <(env -0)

# display all variable key value pairs
for K in "${!MYMAP[@]}"; do 
    echo $K = ${MYMAP[$K]}; 
done

Учитывая ваш последний комментарий, не желая вводить все переменные ENV, вы можете сделать что-то вроде:

#!/bin/bash
envArray=( SMTP_PASSWORD MICROSCANNER_TOKEN )

declare -A MYMAP
for k in "${envArray[@]}"; do
    MYMAP[$k]=${!k}
done

for K in "${!MYMAP[@]}"; do
    echo $K = ${MYMAP[$K]};
done
0 голосов
/ 08 октября 2019

Вам необходим ассоциативный массив (поддерживается в bash 4 или более поздней версии).

declare -A arr

arr[SMTP_PASSWORD]=$SMTP_PASSWORD
arr[MICROSCANNER_TOKEN]=$MICROSCANNER_TOKEN

Не существует ранее существующего ассоциативного массива, который автоматически включал бы все существующие переменные среды в качестве своих ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...