On Sat, Mar 17, 2018 at 1:00 AM, <marcelpa...@gmail.com> wrote: > > It works correctly if the single quote is itself quoted. Our test wordlist > would then be: "foo\'bar aaa bbb" > > paulo@monk:~/tmp$ compgen -W "foo\'bar aaa bbb" -- a > aaa > paulo@monk:~/tmp$ compgen -W "foo\'bar aaa bbb" -- b > bbb > paulo@monk:~/tmp$ compgen -W "foo\'bar aaa bbb" -- f > foo'bar >
This seems to work but it does not. For example in the command line # some-cmd f<TAB> will become # some-cmd foo'bar then you press ENTER and it'll still wait for another ' char. Actually every word in the -W "wordlist" needs to be sh-quoted twice (with ``printf %q'' or the new ``${var@Q}'' syntax). It'll be a bit easier if you use an array. For example: # arr=(foo\'bar aaa bbb) # for ((i=0; i<${#arr[@]}; ++i)); do arr[i]=$(printf %q "${arr[i]}"); done # for ((i=0; i<${#arr[@]}; ++i)); do arr[i]=$(printf %q "${arr[i]}"); done # printf '%s\n' "${arr[*]}" foo\\\'bar aaa bbb # compgen -W "${arr[*]}" -- a aaa # compgen -W "${arr[*]}" -- f foo\'bar Then in the command line # some-cmd f<TAB> will become # some-cmd foo\'bar and then you press ENTER and the command will be executed. -clark