사용하기 쉽도록 간단한 bash 기능을 만들고 싶습니다. 아래 답변을 따르십시오.bash 인수를 공백이 포함된 단일 문자열로 연결합니다.저는 다음과 같은 작은 코드 조각을 하나로 묶을 수 있었습니다.
function gcm {
msg="'$*'"
eval "git commit -m ${msg}"
}
이제 이 예제는 "Hello, it's me"(간단한 단어 문자 집합)와 같은 커밋 메시지에는 매우 편리하지만 "[WIP] Halfway trough code"와 같은 커밋 메시지가 필요하지 않으면 다음과 같은 오류 메시지가 표시됩니다. 다음과 같습니다:
zsh: no matches found: [WIP]
뒤에서 무슨 일이 일어나고 있고 이 코드 조각이 실패하는 이유를 설명해 주시겠습니까?
답변1
ZSH에는 다른 쉘에서 볼 수 있는 토큰화 동작이 없으므로( SH_WORD_SPLIT
해당 옵션이 이상한 이유로 켜져 있지 않는 한) 이상한 큰따옴표 구조를 사용할 필요가 없습니다.
% (){ print -l $* } a b c
a
b
c
% (){ print -l "$*" } a b c
a b c
% (){ local msg; msg="$*"; print -l $msg } a b c
a b c
%
따라서 다음이면 충분합니다.
function gcm {
local msg
msg="$*"
git commit -m $msg
}
[WIP]
문자열(예: as '[WIP]'
)을 인용하거나 별칭을 사용하여 와일드카드를 비활성화할 수 있습니다 noglob
.
% function blah { print -l "$*" }
% alias blah='noglob blah'
% blah [de] *blah*
[de] *blah*
%