Bash单if语句校验多个文件存在且非空的正则写法求助
问题原因
- 你使用的
${PREFIX}_R[1,2].fastq写法会触发Shell通配符展开,当对应前缀的R1、R2文件同时存在时,该表达式会被展开为两个独立的文件路径,而[(test命令)的-s参数仅支持接收单个文件路径作为参数,多出来的第二个文件名会被识别为非法的二元运算符,因此抛出你遇到的报错。
修复方案
只需要将if判断行修改为分别校验两个文件的状态,用逻辑与&&关联即可,保证只有两个文件都存在且非空时才满足判断条件:
for files in *.bam do PREFIX=${files%%_aln*} # 分别校验R1、R2文件均存在且非空 if [ -s "${PREFIX}_R1.fastq" ] && [ -s "${PREFIX}_R2.fastq" ] then echo 'Skip' else # 你原来的业务逻辑 do something fi done
- 这里给变量加了双引号,避免文件名包含空格等特殊字符时出现判断异常。
内容的提问来源于stack exchange,提问作者CuriousDude
相关产品推荐
相关产品推荐

