我有一个脚本来准备一些文件以通过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
。有没有办法解决它?
答案 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_1
和i_2
视为变量名称。在这种情况下,当你需要使用一些变量i
后跟一些以变量名中有效的符号开头的后缀时,假设somevar
,你需要使用大括号来标识变量。因此,您需要编写_suffix
而不是$somevar_suffix
。
${somevar}_suffix
中提到了这一点,强调我的:
$ {参数}
参数的值被替换。 需要大括号 当参数是具有多个的位置参数时 数字,或当参数后跟一个不是的字符 被解释为其名称的一部分。 [...]