Расширение параметра оболочки BASH (косвенное)

когда я вхожу echo ${!BASH*} в моей оболочке я получаю все env vars, имя которых начинается со строки "BASH":

BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION

страница bash man довольно сдержанна об этой функции под названием параметр оболочки (косвенное) расширение. Эта информация (синтаксис данного режима подстановки) должна быть где-то, но я не могу найти его.

  1. могу ли я сопоставить строку в конце имени переменной?

    но в основном

  2. могу ли я сопоставить строку в любом месте имени переменной?

    Ну и что было бы чудесно

  3. и что-нибудь (*) в любом месте в имени переменной? (в основном перечислите любую переменную внутри цикла for, И кстати это именно то, что я пытаюсь сделать)

1 ответов


насколько я знаю, нет встроенного способа сделать косвенное расширение имени с соответствием в конце имени.

вот команда, с которой вы можете делать то, что хотите:

$ compgen -v | grep -E "HOME$"

это будет соответствовать каждой переменной, имя которой заканчивается в HOME.

изменяя часть grep, вы можете сопоставить любую часть имени переменной.

compgen - это встроенный bash, предназначенный для использования в сценариях завершения. compgen -v перечислит все имена переменных. compgen -v BASH список те же переменные, что и echo ${!BASH*}, но по одному на строку.