gpt4 book ai didi

linux - Bash 脚本变量行为异常

转载 作者:太空宇宙 更新时间:2023-11-04 09:37:14 25 4
gpt4 key购买 nike

所以我有一个 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”

有什么想法吗?

最佳答案

这可能是单词拆分和/或路径名扩展的某个地方的错误。尝试改变这个:

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

对此:

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

或者

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

关于linux - Bash 脚本变量行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25312632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com