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



我有以下代码:

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`)

相关内容

  • 没有找到相关文章

最新更新