我使用bash来调用用java(gatk)编写的工具,我需要从数组中传递多个参数作为输入参数。我试过这种方式,但似乎没有用。你能帮帮我,怎么解决?
代码:
java $GATK \
-T GenotypeGVCFs \
-R $ref \
-o output.vcf \
for foo in array
do
--variant $foo \
done
我想要被称为:
java $GATK \
-T GenotypeGVCFs \
-R $ref \
-o output.vcf \
for foo in array
do
--variant file1 \
--variant file2 \
--variant file3 ...etc
done
编辑:对不起误解
array=("file1","file2","file3"...)
由于
答案 0 :(得分:5)
我认为你真正想要的是如果array
包含a b c
,那么拥有命令
java $GATK \
-T GenotypeGVCFs \
-R $ref \
-o output.vcf \
--variant a --variant b --variant c
如果是这样,您可以准备第二个阵列:
array=("file 1" "file 2" "file 3")
declare -a fullarray
for i in "${array[@]}"
do
fullarray+=( --variant "$i" )
done
然后
java $GATK \
-T GenotypeGVCFs \
-R $ref \
-o output.vcf \
"${fullarray[@]}"
这也将确保如果array
中的任何名称包含空格,它仍将作为正确的参数传递,而不是分成两个(假设你没有弄乱它)当你将它添加到array
)时。
答案 1 :(得分:0)
使用echo和$():
array=(file1 file2 file3)
java $GATK \
-T GenotypeGVCFs \
-R $ref \
-o output.vcf \
$(for foo in ${array[*]}
do
echo -n " --variant $foo"
done)
答案 2 :(得分:0)
您可以使用以下方法执行此操作:
java $GATK \
-T GenotypeGVCFs \
-R $ref \
-o output.vcf \
${array[*]/#/ --variant }
答案 3 :(得分:0)
@ RealSkeptic的答案是最好的。我写了,为了便于阅读:
array=( "file 1" "file 2" "file 3" )
args=(
"$GATK"
-T GenotypeGVCFs
-R "$ref"
-o output.vcf
)
for foo in "${array[@]}"; do args+=( --variant "$foo" ); done
java "${args[@]}"