Как извлечь определенные переменные из env?

#bash

#bash

Вопрос:

У меня есть несколько переменных в env, которые я хочу извлечь в файл kaniko.env

Env состоит из множества переменных:

 XDG_SEAT=seat0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
XDG_SESSION_TYPE=x11
XDG_VTNR=7
...
  

Переменные, которые я хочу экспортировать

 X3_KNK_IMAGE_LATEST="false"
X3_KNK_GIT_TAG_IMAGE_TAG="true"
X3_KNK_SHORT_SHA_IMAGE_TAG="true"
  

Переменные, которые я не хочу экспортировать

 X3_KNK_BUILD_ARG_BASE="BASE=Python"
X3_KNK_BUILD_ARG_VER="VER=3.6"
X3_KNK_BUILD_ARG_*...
  

Я попытался использовать его, и это работает

 env | grep -E "X3_KNK_(?:(?!BUILD_ARG).)*" >> kaniko.env
  

Но это не работает для grep внутри контейнера из-за версии grep

 bash-5.0# grep -v                                                                                                                                                                                                
BusyBox v1.31.1 (2020-06-02 02:36:36 UTC) multi-call binary.
  

отображение ошибки

 egrep: bad regex 'X3_KNK_(?:(?!BUILD_ARG).)*': Invalid preceding regular expression
  

Итак, как я могу извлечь переменные?

Комментарии:

1. env | grep "X3_KNK_" | grep -v "BUILD_ARG" > kaniko.env может быть

Ответ №1:

Следующее выглядит нормально:

 vars=($(printf "%sn" "${!X3_KNK_@}" | grep -v "BUILD_ARG"))
if ((${#vars[@]})); then
   export "${vars[@]}"
fi
  

${!X3_KNK_@} это расширение bash, которое распространяется на все переменные, названные с этим префиксом.

X3_KNK_(?:(?!BUILD_ARG).)*’: Недопустимые предыдущие правила

(?:...) является ли поиск не поддерживается в расширенных регулярных выражениях. Для этого используйте регулярное выражение perl grep -P .