ZSH, 들어오는 매개변수를 단일 문자열로 연결

ZSH, 들어오는 매개변수를 단일 문자열로 연결

사용하기 쉽도록 간단한 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*
% 

관련 정보