$__git_cmd_idx can be empty in some situations, which leads to errors when using "git add <tab>", "git mv <tab>", "git tag <tab>" and "git branch <tab>". "git mv <tab>" prints this error: __git_count_arguments:5: bad math expression: operand expected at `""' _git_mv:[:9: unknown condition: -gt "git branch <tab>" prints this error: _git_branch:[:4: unknown condition: -lt "git tag <tab>" prints this error: _git_tag:[:3: unknown condition: -lt "git add <tab>" prints this error: __git_find_on_cmdline:[:13: unknown condition: -lt Fix _git_branch, __git_find_on_cmdline and _git_tag by initializing the local "c" variable to 1 when empty. Fix __git_count_arguments by initializing "__git_cmd_idx" to 1. Adjust the for loop in __git_count_arguments to avoid quoting the numeric argument to avoid the following error: __git_count_arguments:8: bad math expression: operand expected at `"1"' This was tested on zsh 5.7.1 (x86_64-apple-darwin19.0). Signed-off-by: David Aguilar <davvid@xxxxxxxxx> --- contrib/completion/git-completion.bash | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 3c5739b905..d51ff5302d 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -1177,6 +1177,9 @@ __git_aliased_command () __git_find_on_cmdline () { local word c="$__git_cmd_idx" show_idx + if [ -z "$c" ]; then + c=1 + fi while test $# -gt 1; do case "$1" in @@ -1304,9 +1307,12 @@ __git_has_doubledash () __git_count_arguments () { local word i c=0 + if [ -z "$__git_cmd_idx" ]; then + __git_cmd_idx=1 + fi # Skip "git" (first argument) - for ((i="$__git_cmd_idx"; i < ${#words[@]}; i++)); do + for ((i=$__git_cmd_idx; i < ${#words[@]}; i++)); do word="${words[i]}" case "$word" in @@ -1448,6 +1454,9 @@ __git_ref_fieldlist="refname objecttype objectsize objectname upstream push HEAD _git_branch () { local i c="$__git_cmd_idx" only_local_ref="n" has_r="n" + if [ -z "$c" ]; then + c=1 + fi while [ $c -lt $cword ]; do i="${words[c]}" @@ -3213,6 +3222,10 @@ _git_svn () _git_tag () { local i c="$__git_cmd_idx" f=0 + if [ -z "$c" ]; then + c=1 + fi + while [ $c -lt $cword ]; do i="${words[c]}" case "$i" in -- 2.32.0.rc2.1.g6e92745b1d