Bash检查现有目录的数组

时间:2014-03-14 20:15:08

标签: arrays bash if-statement

如果检查现有目录,为什么空变量测试为真?

我有两个要处理的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或者甚至是非空文件都没关系 为什么?

当然,在检查目录是否存在之前,我可以单独检查一个元素是否存在,但是我不能在一次检查中这样做吗?

1 个答案:

答案 0 :(得分:1)

将$ {foo [$ n]}放在双引号中:

if test -d "${dir[$n]}"

考虑:

$ test -d '' || echo false
false
$ test -d || echo false
$

通常,始终将变量引用放入双引号中。如果你没有,变量是未定义的,那么就会发生不好的事情,正如你在这里看到的那样。