Bash数组大小说它是我预期的两倍

时间:2012-11-19 13:59:04

标签: arrays bash

我有以下代码:

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

产生以下输出:

2
+ 6f0de9d07538db5d6428acd083c4a4527751596b

第一行应该是数组的大小,第二行是内容。这里显而易见的问题是两个值之间的差异。我在另一个数据集上运行它,并且50行元素正在由中间行报告为100个元素长。

我是否使用错误的方法来查找尺寸,或者我的阵列中有什么时髦的东西?

2 个答案:

答案 0 :(得分:3)

你的数组有两个元素 - +然后是哈希。从命令输出设置数组时,元素是以空格分隔的,而不是换行符。

你可以这样做:

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

或者,如果没有调出shell,效率会有所提高:

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

答案 1 :(得分:1)

在我看来,+符号正在为数组添加额外的元素。您可以在创建阵列时尝试过滤掉它们。类似的东西:

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