bash-在遍历列表时将find的输出分配给变量

时间:2018-08-04 17:28:06

标签: bash shell variables find glob

我是Shell脚本的新手。在bash中,我试图在遍历列表时将find的输出分配给新变量。

for i in {25,27}; do
     r1=$(find $i*R1_001.fastq.gz)
     r2=$(find $i*R2_001.fastq.gz)
done

我要发生的事情是为计算分配文件名到r1和r2。例如:

$ echo $ r1

  

25-NVB206M02_S27_R1_001.fastq.gz

但是,计算机会将其解释为*不是通配符。我收到一条错误消息:

查找:`25 * R1_001.fastq.gz':无此类文件或目录

感谢您提供的任何建议。

1 个答案:

答案 0 :(得分:0)

如果要使用find,则需要类似以下内容的

r1=$(find . -name "${i}*R1_001.fastq.gz" | sed 's#^.*/##')

或者更好的是,您可以使用:

r1="${i}*R1_001.fastq.gz"

请注意,您可能与此匹配0个或多个文件。例如,如果多个文件匹配,则i=2r1会匹配r22-NVB...20-NVB...,{{1} }, 等等。您可能只希望变量包含单个文件名。尝试收紧匹配的内容。

如果没有匹配的文件21-NVB...可能仍不为空。示例:

200-NVB...