Определение переменных среды с помощью другой переменной

#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