Bash脚本变量表现奇怪

时间:2014-08-14 16:05:21

标签: linux bash

所以我有一个带有函数的bash脚本,我调用了几次。它第一次调用它按预期工作,但任何进一步的调用都会产生意想不到的结果

function doSomething(){
    objFiles="$(dirname "$1")/*.obj";
    for objFile in $objFiles;
    do
        echo "*****IN HERE***** - objfile is \"$objFile\"";
        check="${objFile: -9}";
        if [ $check == ".guid.obj" ]
        then
            echo "do nothing...";
        else
            echo "do something with obj file";
        fi;
    done
}

我将路径传递到与我正在寻找的.obj文件相同的目录中的文件。

所以第一次这是它的输出

+ objFiles='/usr/local/apache2/htdocs/uploads/3dmodels/2/47/zip test/*.obj'
+ for objFile in '$objFiles'
+ echo '*****IN HERE***** - objfile is "/usr/local/apache2/htdocs/uploads/3dmodels/2/47/zip test/test1.guid.obj"'
+ check=.guid.obj
+ '[' .guid.obj == .guid.obj ']'
+ echo 'do nothing...'

第二次这是输出

+ objFiles='/usr/local/apache2/htdocs/uploads/3dmodels/2/47/zip test/*.obj'
+ for objFile in '$objFiles'
+ echo '*****IN HERE***** - objfile is "/usr/loc"'
+ check=
+ '[' == .guid.obj ']'
myShellScript.sh: line 142: [: ==: unary operator expected

第一次找到.obj文件,但第二次找到它时,它会得到它“/ usr / loc”

任何想法?

1 个答案:

答案 0 :(得分:2)

它可能是一个带有单词拆分和/或路径名扩展的错误。尝试更改此内容:

objFiles="$(dirname "$1")/*.obj";
for objFile in $objFiles;

对此:

for objFile in "$(dirname "$1")"/*.obj

或者

objFiles=("$(dirname "$1")"/*.obj)
for objFile in "${objFiles[@]}"