我正在学习 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
反而