当我运行命令时
git cherry origin/Server_Dev
在我的 git 存储库中,我得到了表单的提交列表
+ 95b117c39869a810595f1e169c64e728d2d7443d
+ e126f1b996ecf1d2a8cf744c74daa92cce338123
+ 869169a6cb0bbe8f1922838798580a1e74ec3884
+ 667819b617c88bd886dc2001f612b5c7a4d396c3
+ fd41328a84b0a127affa6fe4328c93e933de378c
+ cfe1807e5d4acc6b5e75f4463dadb3b1c957376f
这是一件好事。
我现在想从 bash 脚本中执行此命令,并使用以下代码将输出捕获到数组中:
commit_hashes=(`git cherry origin/Dev`)
echo ${commit_hashes[@]}
产生以下输出:
+ 95b117c39869a810595f1e169c64e728d2d7443d + e126f1b996ecf1d2a8cf744c74daa92cce338123 + 869169a6cb0bbe8f1922838798580a1e74ec3884 + 667819b617c88bd886dc2001f612b5c7a4d396c3 + fd41328a84b0a127affa6fe432
8c93e933de378c + cfe1807e5d4acc6b5e75f4463dadb3b1c957376f
这不是一件好事
我的提交列表作为一个字符串返回,我必须先分解它才能使用它。经过一番搜索,我发现如果我IFS=""
在捕获数据之前添加到我的脚本中,我的问题就会得到解决。
所以我编辑了我的代码来阅读
IFS=""
commit_hashes=(`git cherry origin/Dev`)
echo ${commit_hashes[@]}
哪个输出
+ 95b117c39869a810595f1e169c64e728d2d7443d
+ e126f1b996ecf1d2a8cf744c74daa92cce338123
+ 869169a6cb0bbe8f1922838798580a1e74ec3884
+ 667819b617c88bd886dc2001f612b5c7a4d396c3
+ fd41328a84b0a127affa6fe4328c93e933de378c
+ cfe1807e5d4acc6b5e75f4463dadb3b1c957376f
这完全结束了我的现实感。
我想知道为什么事情正在做他们正在做的事情,所以经过更多搜索后,我发现这被称为 the Internal Field Separator
,命令解释器在 Unix 系统上使用它来确定将模式分解为标记的位置。
这个我明白。
我不明白的是
- 为什么将此变量设置为空字符串允许它以理智的方式处理我的数组数据。
- 为什么我必须首先设置它,而不是解释器意识到它正在处理数组数据并适当地处理它。
- 将内部字段分隔符设置为空字符串会产生什么影响,因为默认情况下它包含空格、制表符和换行符的字符。
一些帮助我理解这三点将不胜感激。