如果我使用以下命令:
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
)。