Расширение параметра оболочки BASH (косвенное) - PullRequest
7 голосов
/ 12 мая 2011

Когда я ввожу echo ${!BASH*} в своей оболочке, я получаю все переменные env, чье имя начинается со строки "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 довольно осторожна в отношении этой функции, которая называется расширение параметра оболочки (косвенное) . Эта информация (синтаксис этого конкретного режима globbing) должна быть где-то, но я не могу ее найти.

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

    Но в основном

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

    О, и что было бы восхитительно

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

1 Ответ

6 голосов
/ 12 мая 2011

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

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

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

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

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

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

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