如果检查现有目录,为什么空变量测试为真?
我有两个要处理的dir阵列,我循环/检查这样:
for n in {1..20}
do
if test -d ${dir[$n]}
then
echo "Execute ${dir[$n]}"
fi
if test -d ${other[$n]}
then
echo "Execute ${other[$n]}"
fi
done
但是,在执行现有dirs之后,脚本还会尝试执行不存在的数组元素。如果我检查dir,file或者甚至是非空文件都没关系 为什么?
当然,在检查目录是否存在之前,我可以单独检查一个元素是否存在,但是我不能在一次检查中这样做吗?
答案 0 :(得分:1)
将$ {foo [$ n]}放在双引号中:
if test -d "${dir[$n]}"
考虑:
$ test -d '' || echo false
false
$ test -d || echo false
$
通常,始终将变量引用放入双引号中。如果你没有,变量是未定义的,那么就会发生不好的事情,正如你在这里看到的那样。