我有以下代码:
commit_hashes_raw=(`git cherry origin/Server_Dev`)
echo ${#commit_hashes_raw[@]}
echo ${commit_hashes_raw[@]}
这将产生以下输出:
2
+ 6f0de9d07538db5d6428acd083c4a4527751596b
第一行应该是数组的大小,第二行是内容。不过,这里明显的问题是两个值之间的差异。我已经在另一个数据集上运行了这个,中间行报告了一个 50 个元素的数组,长度为 100 个元素。
我是否使用了错误的方法来查找大小,或者我的数组是否有一些时髦的东西?
数组有两个元素 - +
,然后是哈希。 从命令输出设置数组时,元素以空格分隔,而不是换行符分隔。
你可以这样做:
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)
在我看来
,+
符号正在向数组添加额外的元素。您可以在创建数组时尝试过滤掉它们。像这样:
commit_hashes_raw=(`git cherry origin/Server_Dev | cut -d' ' -f2`)