2012-11-19 24 views
1

我有以下代碼:猛砸數組大小說這是兩倍大,我希望它是

commit_hashes_raw=(`git cherry origin/Server_Dev`) 
echo ${#commit_hashes_raw[@]} 
echo ${commit_hashes_raw[@]} 

所產生的輸出如下:

2 
+ 6f0de9d07538db5d6428acd083c4a4527751596b 

第一行應該是數組的大小,第二個是內容。這裏顯而易見的問題是兩個值之間的差異。我已經在另一個數據集上運行了這個數據集,並且一個50元素數組被中間報告爲100個元素長。

我使用了錯誤的方法來查找大小或者是否有一些與我的數組有關的東西?

+1

這個數組中沒有2個元素嗎?它看起來像我:+號,然後是40個字符的十六進制字符串。 –

回答

3

你的數組有兩個元素 - +然後散列。從命令輸出設置數組時,元素以空格分隔,而不是換行符分隔。

你可以這樣做:

commit_hashes_raw=($(git cherry origin/Server_Dev | awk '{print $NF}')) 

或者稍差有效,而無需調用出殼:

commit_hashes_raw=() 
while read plus hash; do 
    commit_hashes_raw+=("$hash") 
done < <(git cherry origin/Server_Dev) 
1

在我看來像+符號添加額外的元素,你的陣列。您可以嘗試在創建陣列時將其過濾掉。例如:

commit_hashes_raw=(`git cherry origin/Server_Dev | cut -d' ' -f2`)