KornShell - 使用可能未设置的变量进行测试

C. *_*oss 4 unix shell scripting ksh

我在KornShell(ksh)中有以下代码:

FAILURE=1
SUCCESS=0

isNumeric(){

    if [ -n "$1" ]; then
        case $1 in
            *[!0-9]* | "")  return $FAILURE;
                       * )  return $SUCCESS;
        esac;
    else
        return $FAILURE;
    fi;
}

#...
FILE_EXT=${FILE#*.}

if [ isNumeric ${FILE_EXT} ]; then
    echo "Numbered file."
fi
#...
Run Code Online (Sandbox Code Playgroud)

在某些情况下,文件名没有扩展名,这会导致FILE_EXT变量为空,这会导致以下错误: ./script[37]: test: 0403-004 Specify a parameter with this command.

我应该如何调用此函数以便我不会收到此错误?

Pau*_*ce. 5

在测试函数的退出代码时,应该不使用方括号,否则,您将始终获得"true".另外,你应该引用你的变量.您可以为空扩展进行额外测试,如下所示:

FILE_EXT=${FILE#*.}

if isNumeric "${FILE_EXT}" &&
    [ "${FILE_EXT}" != "${FILE}" -a "${FILE_EXT}" != "" ]
then
    echo "Numbered file."
fi
Run Code Online (Sandbox Code Playgroud)

编辑:添加测试以处理以"."结尾的文件名.