空测试处理

空测试处理

我正在学习 bash,这行代码如何(为什么)工作令人困惑if [$1 = ]; then。有人可以解释一下吗?

来自 bash 教程这里在下面文件重命名器(第六块)

# a quick check to see if any files were given
# if none then it's better not to do anything than rename some non-existent
# files!!

if [$1 = ]; then
    echo "no files given"
    exit 0
fi

答案1

该代码是错误的,如果参数不为空(并且不以空格开头),则它不起作用,因为它[不是特殊字符,并且如果它不是单独的单词(甚至不能与 一起使用[[),则不会被识别为命令。

set -x向您展示 shell 看到的内容:

set -x
[$1 = ]
    + '[' = ']'

[在这种情况下,测试结果为 true,因为和之间有一个字符串];是这样也没关系=

对非空参数的测试应该如下进行

[ -n "$1" ] ; echo $?
    + '[' -n '' ']'
    + echo 1

或者

[ -z "$1" ] ; echo $?
    + '[' -z '' ']'
    + echo 0

反而

相关内容