Igor Samarskiy
Igor Samarskiy

Reputation: 93

How to extract certain variables from env?

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

Answers (1)

KamilCuk
KamilCuk

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

Related Questions