将git日志导出为多行字符串形式的变量
当我执行这个命令时将git日志导出为多行字符串形式的变量,git,shell,Git,Shell,当我执行这个命令时 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 comm
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
如何进行多行导出?Bash使用
IFS
变量的内容处理输入。从文档中:
内部字段分隔符(IFS),用于在展开后进行字拆分,并使用read builtin命令将行拆分为字。
默认值为
您可以更改IFS
的值来改变行为:
IFS='' export LOG=`git log 23237d...1a8815 --oneline --pretty=tformat:"%h %B"`
您需要在对echo的调用中引用
LOG
变量的扩展:
echo "$LOG"
这可以防止发生分词。在这种情况下,您不需要修改
IFS
变量。此解决方案将IFS设置为空字符串的问题在于它具有误导性。IFS=''不影响调用“git log”并将其存储在log变量中的行,而是影响echo$log
行,并在shell会话的其余部分保持不变,在shell中尝试以下操作,注意哪些显示y
,哪些保留换行符并输出三行y
:(1)IFS=”;LOG=`yes | head-n3`;取消国际单项体育联合会;echo$LOG
(2)取消设置IFS;LOG=`yes | head-n3`;IFS=“”;echo$LOG
(3)取消设置IFS;LOG=`yes | head-n3`;回显“$LOG”