为什么 git 将我的日志输出用引号引起来?

为什么 git 将我的日志输出用引号引起来?

如果我使用以下命令:

git log --pretty=format:"%ad %s%d"

输出是:

2016 年 4 月 26 日星期二 11:29:24 +0000 更新配置

如果我执行以下操作:

SIMPLE='--pretty=format:"%ad %s%d"'
git log $SIMPLE

那么输出如下:

“2016 年 4 月 26 日星期二 11:29:24 +0000 更新配置”

我知道我可以定义alias gitl='git log --pretty=format:"%ad %s%d"'。但我不知道为什么 git 会这样做。

使用变量替换方法时,为什么输出出现在引号中?

答案1

差异是由于一些 shell 引用特性造成的。

如果你执行其中任何一个(它们是在 shell 中引用的等效方式)

git log --pretty=format:'%ad %s%d'
git log '--pretty=format:%ad %s%d'
git log --pretty=format:%ad\ %s%d
git log --pretty=form'at:%ad %'s%d
git log --pretty=format:%ad" "%s%d
git log --pretty=format:"%ad %s%d"

git将得到两个参数,第一个是log,第二个是--pretty=format:%ad %s%d

如果你执行

SIMPLE='--pretty=format:"%ad %s%d"'

该变量SIMPLE将具有值--pretty=format:"%ad %s%d"包括双引号。

现在如果我们在 zsh 中并且你执行

git log $SIMPLE

或者在bash中

git log "$SIMPLE"

git会将第二个参数视为--pretty=format:"%ad %s%d"。 (如果我git log $SIMPLE在 bash 中执行,我会收到错误,因为git获取三个参数:log--pretty=format:"%ad%s%d")。

因此,在变量内部,您不需要内部引号(除非您想将其传递给eval)。

相关内容