Мой ответ относится к написанной части вашего вопроса, где вы запрашиваете окружение переменных, поскольку из приведенного вами примера не ясно, являются ли рассматриваемые переменные на самом деле переменные среды или просто переменные оболочки.
Поскольку printenv
предоставляет вам список переменных среды в виде NAME = VALUE обозначений, вы можете сделать
arr=($(printenv|grep '^DIR[0-9]'|cut -f 1 -d =))
grep
выбирает строки, начинающиеся с DIR , за которыми следует хотя бы один ди git. Настройте шаблон в соответствии со своими потребностями.
cut
выбирает только левую часть знака равенства, то есть имя.
В этом решении предполагается, что у вас нет переменных среды, которые содержат встроенные переводы строк. В этом случае я предлагаю использовать язык программирования, который дает вам список переменных среды, которые вы можете изменить на oop. Perl, Ruby или Java.