Подтвердить что ты не робот

Bash: получить список переменных, имя которых соответствует определенному шаблону

В bash

echo ${!X*}

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

4b9b3361

Ответ 1

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

compgen -A variable | grep X

Ответ 2

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

env | grep ".*X.*"

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

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

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

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

Ответ 3

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

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

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

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

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

set | cut -d= -f1 | grep X

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

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

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

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

Ответ 4

Самый простой способ - сделать

printenv |grep D.*=

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

Ответ 5

env | awk -F= '{if($1 ~ /X/) print $1}'