2014-11-06 79 views
0

我想要做一些类似下面的循环来找到路径中的所有“* e-0 [1-9]”目录(1e-04 ,3e-07等等)。如果找到这样的目录,我想要执行一些命令。我的问题是如果条件,这给了我不同的错误使用shbash。我得到的sh的错误是“[:unexpected sequence”,对于bash是“[:too many arguments]”。我在stackoverflow的不同问题中发现了这个问题,但是这些问题主要与if条件中从“==”到“=”的转换有关,在这里不是这种情况。问题部分看起来像这样:

for i in `seq 1 9`; 
do 
    directory=*e-0$i 
    // directory="*e-0"+$i // also tried things like that 
    if [ -d ${directory} ] // THIS is the line stated in the error 
    then 
     echo $directory 
    fi 
done 

在此先感谢。

+2

引用! 'if [-d“$ {directory}”]' – fedorqui 2014-11-06 12:54:08

回答

4

Use More Quotes™

if [ -d "$directory" ] 

还是一个简单的方法整个循环:

shopt -s nullglob 
for directory in *e-0[1-9]/ 

这并不需要检查,如果有一个匹配,因为循环体将仅运行匹配路径。尾部的斜线确保它只匹配目录

+2

这个循环的好主意,但是除非你启用了nullglob'shopt -s nullglob',否则检查应该仍然存在。 – 2014-11-06 13:00:49

+0

感谢您的回答。 for循环完成了工作! @汤姆费内奇:是的,我将把支票留在那里,如果没有发现任何东西,请注意。 – 2014-11-06 13:11:32