Получить список переменных, имя которых соответствует определенному шаблону - PullRequest
34 голосов
/ 04 февраля 2009

В Баш

echo ${!X*}

напечатает все имена переменных, чье имя начинается с 'X'.
Можно ли получить то же самое с произвольным шаблоном, например, получить все имена переменных, чье имя содержит 'X' в любой позиции?

Ответы [ 5 ]

52 голосов
/ 04 февраля 2009

Используйте встроенную команду compgen:

compgen -A variable | grep X
8 голосов
/ 04 февраля 2009

Это должно сделать это:

env | grep ".*X.*"

Редактировать: извините, это тоже ищет X в значении. Эта версия ищет только X в имени переменной

env | awk -F "=" '{print $1}' | grep ".*X.*"

Как отмечает Павел в комментариях, если вы ищете и локальные переменные, env необходимо заменить на set:

set | awk -F "=" '{print $1}' | grep ".*X.*"
3 голосов
/ 13 января 2013

Это будет искать X только в именах переменных и выводить только совпадающие имена переменных:

set | grep -oP '^\w*X\w*(?==)'

или для облегчения редактирования искомого шаблона

set | grep -oP '^\w*(?==)' | grep X

или просто (может быть, легче запомнить)

set | cut -d= -f1 | grep X

Если вы хотите сопоставить X внутри имен переменных, но вывести в форме имя = значение, тогда:

set | grep -P '^\w*X\w*(?==)'

и если вы хотите сопоставить X внутри имен переменных, но вывести только значение, то:

set | grep -P '^\w*X\w*(?==)' | grep -oP '(?<==).*'
2 голосов
/ 04 февраля 2009

Проще всего сделать

printenv |grep D.*=

Единственное отличие состоит в том, что он также печатает значения переменной.

1 голос
/ 04 февраля 2009
env | awk -F= '{if($1 ~ /X/) print $1}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...