我有一个bash脚本,用于生成在群集上运行Jobs的向量。例如:
Vector = [1.cluster 2.cluster 3.cluster]
我需要更新此脚本以记录此作业。通常我会这样做:
qstat jobnumber.cluster
我的背景是python,在python中我可以做类似的事情:
map(qstat, Vector)
这将返回一个带有所有向量条目的函数返回值的向量。所以问题是:我可以将函数应用于bash中的向量并获取向量吗?
答案 0 :(得分:1)
这是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
附加到数组的两种方式之间的区别在于,第一种显式扩展数组以添加新元素,而第二种方法创建一个带有new元素的新数组,以将其添加到结尾。那是因为bash没有Python的extend
方法。
如果您使用的是IFS分隔字符串:
result=""
for cluster in $Vector; do
result="${result} $(qstat cluster)"
done
答案 1 :(得分:0)
不,Bash没有map
函数将函数应用于数组中的每个元素,为您提供数组。您可以使用for
循环手动执行此操作:
declare -a results
for job in "${jobs[@]}"
do
results+=($(qstat $job))
done