检查变量已设置,值为ksh

ame*_*mer 3 shell ksh

我有一个用户输入的脚本,REFRESH选项是可选的.我需要测试以查看$ REFRESH是否存在并且等于字符串"REFRESH",如果它然后运行特定的代码块.

用户将执行

./export_data.sh <user> <type> [REFRESH]
Run Code Online (Sandbox Code Playgroud)

如果我在PHP中这样做我会简单地使用isset()函数,在ksh中是否存在等价?

我尝试了以下但是这次失败,因为在第二次测试中没有设置$ REFRESH:

if [ -n $REFRESH ] && [ $REFRESH == "REFRESH" ]
then
    echo "variable is set and the expected value";
    # do stuff
fi
Run Code Online (Sandbox Code Playgroud)

我能想到的另一种方法是嵌套if但是这看起来很乱:

if [ -n $REFRESH ]
then
    if [ $REFRESH == "REFRESH" ]
    then
        echo "variable is set and the expected value";
        # do stuff
fi
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

Jon*_*ler 7

if [ "${REFRESH:-unset}" = "REFRESH" ]
then ...
Run Code Online (Sandbox Code Playgroud)

unset如果值中没有值$REFRESH或值为空字符串,则替换.无论哪种方式,它都与"REFRESH"不同,因此它的行为符合要求.

测试变量时,用双引号括起来; 它可以减轻焦虑.事实上,这意味着你可以简单地写:

if [ "$REFRESH" = "REFRESH" ]
then ...
Run Code Online (Sandbox Code Playgroud)