我正在使用一个结合了个人文件的程序,并且正在将该程序整合到我要整合的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`)
非常感谢您的帮助!
答案 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
来生成绝对文件名。