Shell脚本问题“if [-d $ {directory}]”

时间:2014-11-06 12:50:20

标签: bash shell

我想做一些类似下面的循环来查找路径中的所有“* e-0 [1-9]”目录(1e-04,3e-07等等......)。如果找到这样的目录,我想要执行一些命令。我的问题是if条件,它使用 sh bash 给出了不同的错误。我得到的 sh 错误是“[:意外序列”, bash 是“[太多参数”]。我在stackoverflow中的不同问题中发现了这个问题,但是这些问题主要与if-condition中从“==”到“=”的转换有关,这不是这里的情况。问题部分如下所示:

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

提前致谢。

1 个答案:

答案 0 :(得分:4)

Use More Quotes™

if [ -d "$directory" ]

或整个循环的更简单的方法

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

这不需要检查是否匹配,因为循环体只会针对匹配路径运行。尾部斜杠确保它只匹配目录