使いやすいようにシンプルなbash機能を作りたいです。以下の回答に従ってください。bash引数をスペースを含む単一の文字列に連結します。私は次のような小さなコードを1つにまとめることができました。
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*
%