다음 명령을 사용하는 경우:
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
때문에 오류가 발생합니다 .)git
log
--pretty=format:"%ad
%s%d"
따라서 변수 내부에는 내부 따옴표가 필요하지 않습니다( 에 전달하려는 경우 제외 eval
).