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

차이점은 일부 쉘 인용 특성 때문입니다.

이들 중 하나를 실행하는 경우(셸에서 인용하는 것과 동일한 방법입니다)

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

아니면 배쉬에서

git log "$SIMPLE"

git두 번째 매개변수를 로 처리합니다 --pretty=format:"%ad %s%d". (Bash에서 실행하면 , , 및 3개의 매개변수를 사용하기 git log $SIMPLE때문에 오류가 발생합니다 .)gitlog--pretty=format:"%ad%s%d"

따라서 변수 내부에는 내부 따옴표가 필요하지 않습니다( 에 전달하려는 경우 제외 eval).

관련 정보