Junio C Hamano <junkio@xxxxxxx> wrote: > "Shawn O. Pearce" <spearce@xxxxxxxxxxx> writes: > > > +__gitcomp () > > +{ > > + local all c s=$'\n' IFS=' '$'\t'$'\n' > > + for c in $1; do > > + case "$c" in > > + --*=*) all="$all$c$s" ;; > > + *) all="$all$c $s" ;; > > + esac > > + done > > + IFS=$s > > + COMPREPLY=($(compgen -W "$all" -- "${COMP_WORDS[COMP_CWORD]}")) > > + return > > +} > > + > > I do not understand what is going on here. Care to explain? > > (1) "for c in $1": because $1 is not dquoted, it is split into > word with IFS -- which IFS applies to this splitting? The > local one you hand-define to the typical " \t\n" value? Correct. > (2) when this function returns, what IFS value does the caller > would have? Is the "local" used to avoid screwing up the > caller? > Correct. Basically at the time I'm forming 'all' I want $1 split based on normal splitting rules, as I'm using space, tag and LF within the script in some places for the first parameter to __gitcomp. But when I run compgen I need IFS to be just LF ($s) so that $all is split only on LF and not on spaces, as spaces were added to $all after each unique option. This way the trailing space is part of the unique option, and bash will tack in the trailing space for me, despite having -o nospace enabled. -- Shawn. - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html