2012-11-12 27 views
0

我有一個bash腳本,用於生成羣集上運行作業的向量。示例:bash在矢量元素上執行一個函數

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

我需要更新此腳本以保留此作業的記錄。通常情況下,我會做:

qstat jobnumber.cluster 

我的背景是Python和Python中我可以這樣做:

map(qstat, Vector) 

,這將返回我的向量與所有矢量條目函數的返回值。所以問題是:我可以在bash中將函數應用於矢量並獲取矢量嗎?

+0

你分配這樣'或'矢量= 1.cluster 2.cluster 3.cluster '?換一種說法,'echo $ {Vector [0]}'print'1.cluster'還是'1.cluster 2.cluster 3.cluster'? – abarnert

+0

Vector是通過附加其他命令輸出創建的:Job + = $ Command) – Mac

+0

因此'$ Command'是另一個數組變量嗎? PS,你的第一行既不是有效的Python(你需要'list'成員之間的逗號)或bash(你把數組放在parens中,而不是括號內,並且不能有額外的空格)。沒有人有任何叫做「矢量」的東西。如果您使用正確的術語和實際的工作代碼,而不是類似的東西,您會得到更好的答案。 – abarnert

回答

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 

追加到陣列的兩種方法之間的區別是第一個明確地擴展陣列添加新元素,而第二個創建用新元素將新元素添加到最後。這是因爲bash沒有與Python的extend方法等價。

如果您使用的是IFS分隔字符串:

result="" 
for cluster in $Vector; do 
    result="${result} $(qstat cluster)" 
done 
0

不,擊不具有map功能數組中的一個函數應用到每個元素,給你一個數組回來。你可以手工用for循環做到這一點:通過`矢量=(​​1.cluster 2.cluster 3.cluster)

declare -a results 
for job in "${jobs[@]}" 
do 
    results+=($(qstat $job)) 
done 
相關問題