Нет.POSIX не требует такого «косвенного расширения» в оболочке.Лучшее, что вы можете сделать, это eval
, если вы хотите быть строго POSIX-совместимым:
ENV=PATH
eval echo "\"$ENV is \$$ENV\""
Вывод (пример):
PATH is /usr/bin
По моему опыту, использование BashПрактически нигде нет проблем, поэтому вам также следует придерживаться Bash, если вы не педантично используете POSIX.
Помните, что eval
опасно.Рекомендуется проверить, что строка безопасна для eval
, перед тем, как на самом деле ее оценить, если строка не создана вами (вашим сценарием), а не каким-либо пользовательским вводом.Будет работать что-то простое:
echo "$ENV" | grep -qi '^[A-Z_][A-Z0-9_]*$'
Проверьте значение выхода $?
.Если это ноль, тогда вы можете спокойно оценить $ENV
.Если это 1, то вам лучше проверить строку более тщательно.