while 循环条件-在 bash 中搜索字符串模式

while 循环条件-在 bash 中搜索字符串模式

我正在修改一个 bash 脚本,我需要编写一个循环并测试源目录中是否存在特定模式的文件。

如果我指定特定文件但不使用通配符(file_patt*例如),脚本就会起作用。有什么想法吗?

while [[ ! -e $SRC_DIR/file_patt* ]] ; do 
    echo "in loop"
done

答案1

我认为我可以用一种相当简单的方法解决你的问题。

我不想使用非内置函数:

unset i
rm *.txtx
# Now it is sure no matching file is in this dir
while a=(*.txtx) [ ! -e "$a" ]; do
   echo loop $i; 
   [ $((++i)) -eq 5 ] && >a.txtx # Creates a matching file if i == 5
done
ls *.txtx

输出为:

loop
loop 1
loop 2
loop 3
loop 4
loop 5
a.txtx

仅检查数组的大小是不够的,因为如果没有与模式匹配的文件,则包含模式的数组大小将为 1。*.txtx但是可能会有一个名为的文件*.txtx,因此-e必须使用它来检查结果是否只是模式本身或真实文件。

如果在循环中创建了更多匹配的文件,它仍然可以正常工作,就像$a一样${a[0]}

我希望这有帮助!

相关内容