Unix循环列出文件失败排查:为何通配符循环无法找到文件?
哈哈,这个坑我之前也踩过!问题出在变量名的边界模糊上——shell会把$i_flank当成一个完整的变量名,而不是你想的$i加上_flank。因为shell变量名可以包含下划线,所以当你写*_$i_flank.fasta时,它会去找名为i_flank的变量(而这个变量你根本没定义,展开后就是空字符串),最后变成*_.fasta,自然找不到文件啦!
解决方法很简单,给变量i加上花括号{},明确告诉shell变量的边界:
for i in $(seq 100 100 200); do ls *_${i}_flank.fasta; done
另外,其实bash本身支持大括号扩展,不用调用seq也能实现同样的效果,写法更简洁:
for i in {100..200..100}; do ls *_${i}_flank.fasta; done
你可以试试这两种写法,应该就能正常列出文件了~
内容的提问来源于stack exchange,提问作者SamL
相关产品推荐
相关产品推荐

