Bash 将计算命令传递给群集作业

Bash 将计算命令传递给群集作业,bash,escaping,lsf,Bash,Escaping,Lsf,TL;DR 试图将形式为$($LSB_JOBINDEX-1))的计算传递给集群调用,但出现错误 $((2-1)): syntax error: operand expected (error token is "$((2-1))") 我如何正确地转义,或者使用什么替代命令使其工作 详细说明: 为了在我的工作流程中实现自动化,我目前正在尝试编写一个脚本,以预定义的顺序自动发出bsub命令 这些命令中的一些是数组作业,每个数组作业都应该处理一个文件。 如果在没有集群调用的情况下完成,它将如下所示:

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))]}'
对于要使用阵列作业的集群调用,此命令如下所示:

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\u JOBINDEX-1\)]}
,它不会触发计算,但会引发错误:

$((2-1)): syntax error: operand expected (error token is "$((2-1))")

我做错了什么?我尝试过其他的转义和引用方法,但这是我得到的最接近正确的解决方案

我不知道bsub最终是如何执行这些命令的,但是你可以删除
$(
部分,因为数组索引已经是一个算术上下文了@OtherGuy我实际上不知道这一点,我明天会试试,但我相信它可能会解决问题