0

我有一个 bash 脚本,它生成一个在集群上运行的作业的向量。例子:

Vector = [1.cluster 2.cluster 3.cluster]

我需要更新此脚本以记录此作业。通常我会这样做:

qstat jobnumber.cluster

我的背景是 python,在 python 中我可以做类似的事情:

map(qstat, Vector)

这将返回一个向量,其中包含所有向量条目的函数返回值。所以问题是:我可以将函数应用于 bash 中的向量并取回向量吗?

4

2 回答 2

1

这是 Pythonic 代码的 bash 等价物result = [qstat(cluster) for cluster in Vector]

如果您使用的是 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
于 2012-11-12T22:46:12.937 回答
0

不,Bash 没有将map函数应用于数组中的每个元素的函数,从而返回一个数组。for您可以使用循环手动执行此操作:

declare -a results
for job in "${jobs[@]}"
do
    results+=($(qstat $job))
done
于 2012-11-12T22:46:23.253 回答