${1-default_string_value}
차이점은 무엇 입니까?${1-`echo default_string_value`}
첫 번째 형식 대신 두 번째 형식을 사용하는 이유는 무엇입니까?
편집하다:
상대적으로 널리 퍼진 git 별칭과 같이 여러 곳에서 사용되는 두 번째 형식을 보았습니다.abbrev = !sh -c 'git rev-parse --short ${1-`echo HEAD`}' -
내 직감은 두 번째 양식이 명령을 기본값으로 사용해야 하는 기존(예: Google 검색) 스니펫을 수정하여 사용된다는 것입니다. 그러나 뭔가 간과하고 있을 수 있으므로 이 질문입니다.
답변1
기능적인 측면에서는 별 차이가 없습니다. 효율성이 떨어질 뿐입니다. 코드에 대한 몇 가지 추가 참고 사항:
`...`
따옴표가 붙지 않은 채로 남아 있습니다${1...}
. 이는 분할+글로브의 영향을 받는다는 의미이며 여기서는 의미가 없습니다.-
$0
이 인라인 스크립트에는 값을 선택하는 것이 좋지 않습니다. 예를 들어, 오류 메시지를 매우 혼란스럽게 만들 수 있습니다.`...`
더 이상 사용되지 않는 명령 대체 형식입니다.$(...)
이제는 선호되지만 이 특별한 경우에는 별 차이가 없습니다.
또한 명령에 셸 메타 문자(|&;<>()$`\"' \t\n*?[#~=%"
(sh 언어에서 명령 매개변수를 분리하는 SPC 포함) 그런 다음 git
셸을 실행하여 해석합니다.별명그리고 "$@"
그것에 붙어 있습니다. 이제 드디어 실행됩니다 sh -c 'sh -c...'
.
더 최적화하려면 다음과 같이 변경할 수 있습니다.
git config --global alias.abbrev '!
abbrev() {
exec git rev-parse --short "${1-HEAD}"
}
abbrev'
이렇게 하면 일부 포크와 임원이 절약됩니다.
답변2
두 번째 형식을 사용하면 작업 속도가 느려집니다.
perf
내 컴퓨터에서 실행하는 데는 약 300만 클록 주기가 소요되는 것으로 이해됩니다 . bash -c 'echo hello'
명령 대체는 그보다 시간이 덜 걸리기를 바라지만 고정된 문자열을 사용하는 것보다 여전히 작업이 훨씬 더 많습니다.
echo
좀 더 기능적인 것으로 교체 하면 id -u
명령의 값을 재정의할 수 있는 방법이 제공될 수도 있습니다. 이것은 아마도 일관성을 위해 두 번째 형식을 사용하는 두 번째 이유로 이어집니다. 다른 모든 할당은 명령을 재정의하기 위한 것이므로 여기서는 echo가 명령으로 사용됩니다.