From: Johannes Sixt Date: Wed, 07 Oct 2009 09:33:09 GMT Subject: Re: [PATCH 1/3] completion: fix alias listings with newlines Message-ID: <4ACC6055.1070204@viscovery.net> In-Reply-To: <1254905331-29516-1-git-send-email-bebarino@gmail.com> Stephen Boyd schrieb: > __git_aliases () > { > - local i IFS=$'\n' > - for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do > - i="${i#alias.}" > - echo "${i/ */}" > + local i > + git --git-dir="$(__gitdir)" config -z --get-regexp "alias\..*" 2>/dev/null | > + while IFS= read -rd '' i; do > + echo ${i#alias.} | cut -d' ' -f1 > done > } Is it necessary to change the body of the loop? Your version spawns two processes on each iteration, while the original spawned no processes. You can avoid the pipeline (i.e. yet another process) using a "here-string": local i aliases=$(git --git-dir="$(__gitdir)" config -z \ --get-regexp "alias\..*" 2>/dev/null) while IFS= read -rd '' i; do i="${i#alias.}" echo "${i/ */}" # could be: echo "${i%% *}" done <<< "$aliases" but I don't know how well bash handles variable values with embedded NULs. -- Hannes