Reputation: 93
I have several variables in env that I want to extract to file kaniko.env
Env consists of numerous variables:
XDG_SEAT=seat0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
XDG_SESSION_TYPE=x11
XDG_VTNR=7
...
The variables I want to export
X3_KNK_IMAGE_LATEST="false"
X3_KNK_GIT_TAG_IMAGE_TAG="true"
X3_KNK_SHORT_SHA_IMAGE_TAG="true"
The variables I don't want to export
X3_KNK_BUILD_ARG_BASE="BASE=Python"
X3_KNK_BUILD_ARG_VER="VER=3.6"
X3_KNK_BUILD_ARG_*...
I tried to use it and it works
env | grep -E "X3_KNK_(?:(?!BUILD_ARG).)*" >> kaniko.env
But it does not work for grep inside container because of grep version
bash-5.0# grep -v
BusyBox v1.31.1 (2020-06-02 02:36:36 UTC) multi-call binary.
displaying error
egrep: bad regex 'X3_KNK_(?:(?!BUILD_ARG).)*': Invalid preceding regular expression
So, How can I extract variables?
Upvotes: 0
Views: 179
Reputation: 140970
The following looks ok:
vars=($(printf "%s\n" "${!X3_KNK_@}" | grep -v "BUILD_ARG"))
if ((${#vars[@]})); then
export "${vars[@]}"
fi
${!X3_KNK_@}
is a bash extension that expands to all variables named with that prefix.
X3_KNK_(?:(?!BUILD_ARG).)*': Invalid preceding regula
(?:...)
is a lookaround not supported in extended regular expressions. For that, use perl regex grep -P
.
Upvotes: 4