【问题标题】:Export git log to variable as multiline string将 git log 作为多行字符串导出到变量
【发布时间】:2019-02-14 10:15:56
【问题描述】:

当我执行这个命令时

 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

如何进行多行导出?

【问题讨论】:

    标签: git shell


    【解决方案1】:

    需要在调用echo时引用LOG变量的扩展:

    echo "$LOG"
    

    这可以防止发生分词。在这种情况下,您无需修改​​ IFS 变量。

    【讨论】:

      【解决方案2】:

      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 变量中的行,但 IFS='' 会影响 echo $LOG 行,并且还会在 shell 会话的其余部分持续存在,与奇怪的意想不到的效果。
      • 在您的 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"
      猜你喜欢
      • 1970-01-01
      • 2021-10-31
      • 2014-09-05
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      相关资源
      最近更新 更多