bash在向量元素上执行函数

时间:2012-11-12 22:36:04

标签: python bash vector

我有一个bash脚本,用于生成在群集上运行Jobs的向量。例如:

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

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

qstat jobnumber.cluster

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

map(qstat, Vector)

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

2 个答案:

答案 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