0

我正在使用一个组合单个文件的程序,并且我正在将该程序合并到我正在组合的 BASH 管道中。该程序需要为每个文件设置一个标志,如下所示:

program -V file_1.g.vcf -V file_2.g.vcf -V file_3.g.vcf -O combined_output.g.vcf

为了允许脚本处理任意数量的样本,我想读取目录中的各个文件名,并在“-V”标志之后展开每个文件的路径。

我尝试使用以下内容将文件路径添加到变量中,但没有成功进行适当的扩展:

GVCFS=('-V' `ls gvcfs/*.g.vcf`)

任何帮助是极大的赞赏!

4

2 回答 2

2

您可以通过使用循环来使用以下选项填充数组来做到这一点:

options=()
for file in gvcfs/*.g.vcf; do    # Don't parse ls, just use a direct wildcard expression
    options+=(-V "${file##*/}")    # If you want the full path, leave off ##*/
done

program "${options[@]}" -O combined_output.g.vcf
于 2019-06-07T18:18:22.260 回答
0

printf可以帮忙:

options=( $(printf -- "-V %s " gvcfs/*.g.vcf ) )

虽然这不会优雅地处理文件名中的空格。还要考虑realpath生成绝对文件名。

于 2019-06-07T18:20:50.707 回答