Arrays Bash数组大小表示它是我预期的两倍大

Arrays Bash数组大小表示它是我预期的两倍大,arrays,bash,Arrays,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`)
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 | 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`)
在我看来,+符号正在向数组中添加额外的元素。您可以尝试在创建阵列时过滤掉它们。比如:

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

这个数组中没有2个元素吗?在我看来,似乎有+和40个字符的十六进制字符串。这个数组中不是有2个元素吗?对我来说,似乎有两个:+和40个字符的十六进制字符串。