Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > if [ -z "$options" ]; then > + local nocache= > # leading and trailing spaces are significant to make > # option removal work correctly. > - options=" $incl $(__git ${cmd/_/ } --git-completion-helper) " > + options=" $incl $(__git ${cmd/_/ } --git-completion-helper) " || nocache=t > + > for i in $excl; do > options="${options/ $i / }" > done Is there a point in doing this loop if we are not going to eval after all? IOW... > - eval "$var=\"$options\"" > + test -n "$nocache" || eval "$var=\"$options\"" > fi ... I am wondering why it is not more like this if options=" $incl $(__git ${cmd/_/ } --git-completion-helper) " then for i in $excl do options=... done eval "$var=..." fi or just return from the function instead of introducing and setting a new variable, as only remaining thing the function does is to call __gitcomp with $options, but we know that we are giving up on completing this round.