#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
.