Python bash在向量元素上执行函数
我有一个bash脚本,它生成集群上运行作业的向量。例如:Python bash在向量元素上执行函数,python,bash,vector,Python,Bash,Vector,我有一个bash脚本,它生成集群上运行作业的向量。例如: Vector = [1.cluster 2.cluster 3.cluster] 我需要更新此脚本以保留此作业的记录。通常我会: qstat jobnumber.cluster 我的背景是python,在python中,我可以做如下工作: map(qstat, Vector) 这将返回一个向量,函数返回所有向量项的值。所以问题是:我可以在bash中将一个函数应用于一个向量并得到一个向量吗?下面是与Pythonic代码result=[
Vector = [1.cluster 2.cluster 3.cluster]
我需要更新此脚本以保留此作业的记录。通常我会:
qstat jobnumber.cluster
我的背景是python,在python中,我可以做如下工作:
map(qstat, Vector)
这将返回一个向量,函数返回所有向量项的值。所以问题是:我可以在bash中将一个函数应用于一个向量并得到一个向量吗?下面是与Pythonic代码
result=[qstat(cluster)for cluster in vector]
相当的bash代码
如果您使用的是bash数组:
result=() # or declare -a result
for cluster in ${Vector[@]}; do
result=("${result[@]}" "$(qstat $cluster)") # or result+=($(qstat $cluster))
done
两种附加到数组的方法的区别在于,第一种方法显式扩展数组以添加新元素,而第二种方法使用新元素创建新数组以将其添加到末尾。这是因为bash没有与Python的extend
方法等价的方法
如果您使用的是IFS分隔字符串:
result=""
for cluster in $Vector; do
result="${result} $(qstat cluster)"
done
不,Bash没有
map
函数将函数应用于数组中的每个元素,从而返回一个数组。您可以使用for
循环手动执行此操作:
declare -a results
for job in "${jobs[@]}"
do
results+=($(qstat $job))
done
您是通过
Vector=(1.cluster 2.cluster 3.cluster)
还是Vector=1.cluster 2.cluster 3.cluster
?换句话说,echo${Vector[0]}
是否打印1.cluster
或1.cluster 2.cluster 3.cluster
?向量是通过附加其他命令(输出:Job+=$Command)创建的,因此$Command
是另一个数组变量吗?另外,您的第一行既不是有效的Python(在list
成员之间需要逗号),也不是bash(将数组放在paren中,而不是括号中,并且不能有额外的空格)。两个都没有所谓的“向量”。如果您使用正确的术语和实际的工作代码,而不是类似的东西,您将得到更好的答案。