Check if an environment variable is defined

From raju

zsh

There are two ways to check if an environment variable is defined from a shell script. The results between the two differ when the environment variable is set to null.

ztest

% cat check_env_var_ztest.zsh 
#! /usr/bin/env zsh

if [ -z $KAMA ]; then
    echo "KAMA is not set"
else
    echo "KAMA is set"
fi

if [ ! -z $PWD ]; then
    echo "PWD is set"
else
    echo "PWD is not set"
fi

Sample run

% chmod +x check_env_var_ztest.zsh

% ./check_env_var_ztest.zsh 
KAMA is not set
PWD is set

 % KAMA=raju ./check_env_var_ztest.zsh
KAMA is set
PWD is set

 % KAMA= ./check_env_var_ztest.zsh 
KAMA is not set
PWD is set

braces

% cat check_env_var_braces.zsh
#! /usr/bin/env zsh

# man zshexpn(1)
#    ${+name}
#        If name is the name of a set parameter `1' is substituted, otherwise
#        `0' is substituted.

print '${+KAMA} = ' ${+KAMA}
print '${+PWD} = ' ${+PWD}

Sample run

% chmod +x ./check_env_var_braces.zsh

% ./check_env_var_braces.zsh 
${+KAMA} =  0
${+PWD} =  1

 % KAMA=raju ./check_env_var_braces.zsh
${+KAMA} =  1
${+PWD} =  1

 % KAMA= ./check_env_var_braces.zsh 
${+KAMA} =  1
${+PWD} =  1