将git日志导出为多行字符串并存储到变量中

4
当我执行这个命令时
 git log 23237d...1a8815 --oneline --pretty=tformat:"%h %B"

我得到了类似的内容
1a88151 commit1

8a544c0 commit2

b168aa9 commit3

但是当我想将其导出到某个变量时:

export LOG=`git log 23237d...1a8815 --oneline --pretty=tformat:"%h %B"`

并将其输出: echo $LOG, 我得到了这个:

1a88151 commit1 8a544c0 commit2 b168aa9 commit3

如何实现多行导出?
2个回答

9
您需要在调用echo时引用LOG变量的扩展:
echo "$LOG"

这可以防止单词分割。在这种情况下,您不需要修改IFS变量。


5

Bash使用IFS变量的内容处理输入。文档中写道:

内部字段分隔符(IFS)用于在扩展后进行单词拆分并使用read内置命令将行拆分为单词。默认值为<space><tab><newline>

您可以更改IFS的值以更改其行为:

IFS='' export LOG=`git log 23237d...1a8815 --oneline --pretty=tformat:"%h %B"`

这个解决方案的问题在于将IFS设置为空字符串是具有误导性的。IFS=''不会影响调用'git log'并将其存储在LOG变量中的行,而是会影响echo $LOG行,并且还会持续存在于整个shell会话中,产生奇怪和意外的影响。 - Colin D Bennett
尝试在您的shell中运行以下命令,并注意哪些显示y y y,哪些保留换行符并输出三行y:(1)IFS =''; LOG=\yes | head -n3`; unset IFS; echo $LOG (2)unset IFS; LOG=`yes | head -n3`; IFS=''; echo $LOG (3)unset IFS; LOG=`yes | head -n3` ; echo "$LOG"`。 - Colin D Bennett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接