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

配列に追加する2つの方法の違いは、最初の方法では配列を明示的に展開して新しい要素を追加し、2番目の方法では新しい要素を使用して新しい配列を作成して最後に追加することです。extendこれは、bashにPythonのメソッドに相当するものがないためです。

IFSで区切られた文字列を使用している場合:

result=""
for cluster in $Vector; do
  result="${result} $(qstat cluster)"
done
于 2012-11-12T22:46:12.937 に答える
0

mapいいえ、Bashには、配列内の各要素に関数を適用して配列を戻す関数はありません。forこれは、ループを使用して手動で行うことができます。

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