#bash
#bash
Вопрос:
По долгим и скучным причинам мне нужно извлечь одну переменную среды на основе значения другой. например
export LOG_PROCESSOR=LOGCOURIER
export LOGCOURIER=/usr/bin/blah
echo ${$LOG_PROCESSOR}
-bash: ${$LOG_PROCESSOR}: bad substitution
Как я могу получить значение /usr/bin/blah
echo’d в Bash таким образом?
Ответ №1:
Конечно, ничего не найдя в Google целую вечность, я нахожу ответ через 3 секунды после публикации моего вопроса. Вы делаете:
> echo ${!LOG_PROCESSOR}
> /usr/bin/logcourier
Ответ №2:
export LOGCOURIER=/usr/bin/blah
export LOG_PROCESSOR=$LOGCOURIER
echo ${LOG_PROCESSOR}
Ответ №3:
В дополнение к косвенному расширению параметров, bash
4.3 будет иметь именованные ссылки.
declare -n LOG_PROCESSOR=LOGCOURIER
После этого объявления изменение одной переменной приводит к изменению другой.
Ответ №4:
Если у вас есть доступ к Python, это можно сделать следующим образом:
export LOG_PROCESSOR=LOGCOURIER
export LOGCOURIER=/usr/bin/blah
echo $(python -c "import os; print(os.environ[os.environ['LOG_PROCESSOR']])")
> /usr/bin/blah