Por que o git envolve minha saída de log entre aspas?

0

Se eu usei o seguinte comando:

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

a saída é:

Tue Apr 26 11:29:24 2016 +0000 Updated configuration

Se eu fizer o seguinte:

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

a saída é a seguinte:

"Tue Apr 26 11:29:24 2016 +0000 Updated configuration"

Eu sei que posso definir alias gitl='git log --pretty=format:"%ad %s%d"' . Mas está me incomodando saber por que o git está fazendo isso.

Por que a saída aparece entre aspas ao usar a abordagem de substituição de variável?

    
por Kshitiz Sharma 10.05.2016 / 22:18

1 resposta

2

A diferença é por causa de algumas especialidades de citação de shell.

Se você executar um desses (eles são formas equivalentes de citar no 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 receberá dois argumentos, sendo o primeiro log e o segundo --pretty=format:%ad %s%d .

Se você executar

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

a variável SIMPLE terá o valor --pretty=format:"%ad %s%d" , incluindo as aspas duplas.

Agora, se estivermos em zsh e você executar

git log $SIMPLE

ou no bash

git log "$SIMPLE"

git verá o segundo argumento como --pretty=format:"%ad %s%d" . (Se eu executar git log $SIMPLE no bash recebo um erro porque git recebe três argumentos: log , --pretty=format:"%ad e %s%d" ).

Então, dentro da variável, você não precisaria das aspas internas (exceto se quiser passar para eval ).

    
por 10.05.2016 / 22:51

Tags