在BASH脚本中复制和扩展程序标志

时间:2019-06-07 18:11:57

标签: bash parameter-expansion

我正在使用一个结合了个人文件的程序,并且正在将该程序整合到我要整合的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`)

非常感谢您的帮助!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

printf可以帮助您:

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

尽管这将无法正常处理文件名中的空格。 还可以考虑使用realpath来生成绝对文件名。