我正在修改一个 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]}
。
我希望这有帮助!