ZSH,将传入的参数连接成单个字符串

ZSH,将传入的参数连接成单个字符串

我想创建一个简单的 bash 函数以方便使用。按照以下给出的答案:将 bash 参数连接到带有空格的单个字符串中我已经能够将这一小段代码混搭在一起:

function gcm {
  msg="'$*'"
  eval "git commit -m ${msg}"
}

现在,这个例子对于像“你好,是我”(简单的单词字符集)这样的提交消息非常方便,但是当我不需要像“[WIP] Halfway trough code.”这样的提交消息时,我得到错误信息如下: zsh: no matches found: [WIP]

您能否为我解释一下后台发生了什么以及此代码片段为何失败?

答案1

ZSH 令人高兴地没有在其他 shell 中看到的分词行为(除非由于某些奇怪的原因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*
% 

相关内容