Bash: получить список переменных, имя которых соответствует определенному шаблону
В bash
echo ${!X*}
напечатает все имена переменных, имя которых начинается с "X".
Можно ли получить то же самое с произвольным шаблоном, например. получить все имена переменных, чье имя содержит "X" в любой позиции?
Ответ 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.*=
Единственное отличие заключается в том, что он также выводит значения переменных.