我有一个 bash 脚本,它生成一个在集群上运行的作业的向量。例子:
Vector = [1.cluster 2.cluster 3.cluster]
我需要更新此脚本以记录此作业。通常我会这样做:
qstat jobnumber.cluster
我的背景是 python,在 python 中我可以做类似的事情:
map(qstat, Vector)
这将返回一个向量,其中包含所有向量条目的函数返回值。所以问题是:我可以将函数应用于 bash 中的向量并取回向量吗?
这是 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
不,Bash 没有将map函数应用于数组中的每个元素的函数,从而返回一个数组。for您可以使用循环手动执行此操作:
declare -a results
for job in "${jobs[@]}"
do
results+=($(qstat $job))
done