使用数组

时间:2016-11-05 15:37:22

标签: bash

我有一个脚本来准备一些文件以通过qsub提交到集群,我正在创建一个基于文件的数组,然后使用该数组中的元素来创建我的qsub文件。 但是,我无法将变量附加到$RawData/$i_1.fastq.gz部分。这是我的剧本:

> cat create.sh
#!/bin/bash

 RawData="/home/jfertaj/data/FASTQ" 

 # make an array of each sample id 
 mapfile -t myArray < array.txt

 for i in "${myArray[@]}"
 do
      cat > pbs.script.$i << EOF
 #!/bin/bash

 kallisto quant -t 16 -b 100 -o /home/jfertaj/data/results_kallisto/output_bootstrap_$i $RawData/$i_1.fastq.gz $RawData/$i_2.fastq.gz

 EOF
 done
 exit 0;

当我运行bash脚本并查看创建的文件时,我看到了:

...
kallisto quant -t 16 -b 100 -o /home/jfertaj/data/results_kallisto/output_bootstrap_INTP_993 /home/jfertaj/data/FASTQ/.fastq.gz /home/jfertaj/data/FASTQ/.fastq.gz 

我尝试过包含"$i",但之后会显示生成的文件:"INTP_993"_1.fastq.tz。有没有办法解决它?

2 个答案:

答案 0 :(得分:2)

man bash是变量名称的合法字符,因此您需要使用参数扩展的完整语法来防止它被视为参数名称的一部分。 _被解释为$i_1.fastq.gz,而不是${i_1}.fastq.gz

${i}_1.fastq.gz

答案 1 :(得分:1)

O(N)替换为$RawData/$i_1.fastq.gz $RawData/$i_2.fastq.gz

即改变这一点:

$RawData/${i}_1.fastq.gz $RawData/${i}_2.fastq.gz

对此:

kallisto quant -t 16 -b 100 -o /home/jfertaj/data/results_kallisto/output_bootstrap_$i $RawData/$i_1.fastq.gz $RawData/$i_2.fastq.gz

当您确实希望变量kallisto quant -t 16 -b 100 -o /home/jfertaj/data/results_kallisto/output_bootstrap_$i $RawData/${i}_1.fastq.gz $RawData/${i}_2.fastq.gz 附加“_1”和“_2”时,shell会将i_1i_2视为变量名称。在这种情况下,当你需要使用一些变量i后跟一些以变量名中有效的符号开头的后缀时,假设somevar,你需要使用大括号来标识变量。因此,您需要编写_suffix而不是$somevar_suffix

${somevar}_suffix中提到了这一点,强调我的:

  

$ {参数}

     

参数的值被替换。 需要大括号      当参数是具有多个的位置参数时      数字,或当参数后跟一个不是的字符      被解释为其名称的一部分。 [...]