すべての引数を収集して引用するbash関数を作成しようとしましたが、引数に角かっこまたは一重引用符が含まれていると機能しません


2

どこかで提案された「git commit」の次のショートカットを見ました:

function gc {
  git commit -m "$*"
}

これにより、引用符などを使用せずに、コミットメッセージをシェルにインラインで書き込むことができます。好む:

gc This is a commit message

問題は、コミットメッセージ自体に角かっこまたは引用符が含まれている場合、機能しないようです。(そして、コミットメッセージで多くの括弧/引用符を使用します。)bashスクリプトの技術に精通している人は、より良いショートカットを提案できますか?

回答:


3

これはあなたの機能に問題があるとは思わない(より正確には、これはあなたの機能で解決できる問題とは思わない)。bashは、関数を呼び出す前、つまり関数を呼び出すことを決定する前に、コマンド行(引用符付き文字列、さまざまなブラケット式などの解釈を含む)を解析します。したがってgc fixed Greg's bug、bashでは、関数を実行する前に引用符で囲まれた文字列を閉じる必要があります。を入力するとgc printf("%s", integervar) not a good idea、bashは括弧について文句を言い、要求されているコマンド/機能/その他を決定するポイントに到達することさえありません。

使用するポイントは$*、コマンドラインでメモを引用する必要がないことですが、それはメッセージ内のスペースを引用することだけを避けることだと思います。メッセージに他のシェルメタキャラクターが含まれている場合、それらを適切に引用またはエスケープする必要あります。

gc "fixed Greg's bug"
gc 'printf("%s", integervar) not a good idea'
gc 'fixed this & deferred that'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.