我正在尝试运行此
for file in a?; do echo $file; done; for file in b?; do echo $file; done
如果存在与a?
和b?
匹配的文件,则两个循环都运行(预期)
但是如果没有a?
文件,那么我会收到此错误
zsh: no matches found: a?
第二个循环永远不会运行。
如何始终运行两个循环?
我意识到我可以将a?(N)
glob参数放到(N)
来跳过该错误,但是如果没有找到匹配项,我仍然希望第一个循环的no matches found
输出。
答案 0 :(得分:0)
您可以在zsh
中进行此操作:
unsetopt nomatch
for f in a?; do [[ -e "$f" ]] && echo "$f" || echo "no matches found"; done
setopt nomatch
for f in b?; do echo "$f"; done
答案 1 :(得分:0)
由于您只回显了文件名,因此无需循环。
a_files=( a?(N) )
if (( ${#a_files} > 0 ))
then
# We have at least one entry starting with 'a'
echo $a_files
echo b?(N)
fi
假设您确实需要嵌套循环,因为您想使用a和b文件处理某些内容,因此可以执行
a_files=( a?(N) )
if (( ${#a_files} > 0 ))
then
# We have at least one entry starting with 'a'
for a_file in $a_files
do
echo $a_file
for b_file in b?(N)
do
do_something_with $a_file $b_file
done
done
fi
更新:
依次运行两个循环,但保证每个循环至少运行一次:
a_loop_entered=0
for file in a?(N) .
do
if [[ $file != . || $a_loop_entered==0 ]]
a_loop_entered=1
# Now do your loop body.
fi
done