TL; DR
尝试将$(($LSB_JOBINDEX-1))
形式的计算传递给集群调用,但出现错误
$((2-1)): syntax error: operand expected (error token is "$((2-1))")
如何正确转义或使用其他替代命令才能正常工作?
详细信息:
要实现工作流程中的自动化,我目前正在尝试编写一个脚本,该脚本以预定义的顺序自动发出bsub
命令。
其中一些命令是数组作业,应该分别在文件上工作。 如果在没有集群调用的情况下完成,它将看起来像这样:
samplearray=(sample0.fasta sample1.fasta) #array of input files
for s in samplearray
echo $s #some command on $s
done
对于我要使用数组作业的集群调用,此命令如下所示:
bsub -J test[1-2] 'samplearray=(sample0.fastq sample1.fastq)' echo '${samplearray[$(($LSB_JOBINDEX-1))]}'
这将启动两个分别将LSB_JOBINDEX
设置为1或2的作业,这就是为什么我需要减去1才能对数组进行正确索引的原因。
现在的问题出在$((...))
部分,因为在节点上执行的是${samplearray[$\(\($LSB_JOBINDEX-1\)\)]}
,它不会触发计算,但会引发错误:
$((2-1)): syntax error: operand expected (error token is "$((2-1))")
我在这里做错了什么?我尝试了其他转义和引用的方法,但这是我最接近正确解决方案的方法