Issue
I am trying to check if all the environment variables are defined.
Test for individual element works fine as defined below:
[ -z ${env_var1:+y} ] && echo "Env var not defined."
Although I need to check this for multiple elements, hence want to add it in the loop. But somehow it is not working:
env_var_array=( env_var1 env_var2 env_var3 )
for element in "${env_var_array[@]}"
do
[ -z ${element:+y} ] && echo "$element var not defined."
done
It is not working as expected.
Solution
To use variable variable names, use ${!element}
:
#!/bin/bash
env_var_array=( env_var1 env_var2 env_var3 )
for element in "${env_var_array[@]}"
do
[ -z "${!element:+y}" ] && echo "$element var not defined."
done
env_var1 var not defined.
env_var2 var not defined.
env_var3 var not defined.
Regarding the :+y
part:
${parameter:+word}
If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted.
[docs]
Those are not needed in your case, so you can simplfy it to just [ -z ${!element} ]
Answered By - 0stone0