我编写了以下脚本:
cat BaseReCall.sh
#!/bin/bash
#### Usage: < input > < ref > < (array of dbsnps) >
input=$1
ref=$2
Pickle=$3
echo "${Pickle[@]}"
### Assign variables
BaseReCall="gatk BaseRecalibrator \\
-I $input \\
-R $ref \\
-O recal_table "
dir=$(dirname $input)
log=${dir}/BaseReCall.out
string=()
## Store array values in string
for i in "${Pickle[@]}";do
site=$(echo " --known-sites $i")
string+=$site
done
printf "$BaseReCall${string[@]}\n" #>> $log
这个想法是允许我使用数组输入多个 dbsnp 值作为 Pickle。如果我输入 bash 数组看起来不错。
Pickle=(dbSnp gold_standard_indels)
printf "${Pickle[@]}\n"
dbSnp gold_standard_indels
当我将它输入到我的函数中时,我没有得到两个 dbsnps。只有第一个。
sh BaseRecall.sh input ref "${Pickle[@]}"
dbSnp
gatk BaseRecalibrator \
-I input \
-R ref \
-O recal_table --known-sites dbSnp
作为健全性检查,我也尝试在脚本之外运行循环。
string=()
## Store array values in string
for i in "${Pickle[@]}";do
> site=$(echo " --known-sites $i")
> string+=$site
> done
printf "$BaseReCall${string[@]}\n" #>> $log
gatk BaseRecalibrator -I -R -O recal_table --known-sites dbSnp --known-sites gold_standard_indels
它返回了我一直想要的东西。发生这种情况是因为它被作为位置参数输入吗?有没有办法让我为此 Pickle 参数输入多个值?