【发布时间】:2012-11-19 11:42:07
【问题描述】:
当我运行命令时
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
这完全结束了我的现实感。
我想知道为什么事情正在做他们正在做的事情,所以经过更多搜索后,我发现这被称为Internal Field Separator,它在 Unix 系统上被命令解释器用来确定在哪里分解模式进入令牌。
这个我明白了。
我不明白的是
- 为什么将此变量设置为空字符串可以让它以理智的方式处理我的数组数据。
- 为什么我必须首先设置它,而不是解释器意识到它正在处理数组数据并适当地处理它。
- 将内部字段分隔符设置为空字符串会产生什么影响,因为默认情况下它包含空格、制表符和换行符的字符。
如果能帮助我理解这三点,我们将不胜感激。
【问题讨论】: