On Wed, Oct 15, 2008 at 03:11:15PM -0700, RMMM wrote: > I'm trying to create a bash function for use in auto completion, but > I've run into bash behavior I don't understand. All I want to do is > generate a list of the file names from a certain directory. I have a > line > > filenames=$(for file in `ls -1 mydir`; do echo -n "${file} " ; done ) > > This seems to produce the correct list: > bash> echo $filenames > resources doc src > bash> > > However, it doesn't work with the compgen function: > bash> compgen -W "${filenames}" -- s > bash> > > ???? > > On the other hand, if I create the same variable manually, it works: > bash> filenames1="resources doc src " > bash> compgen -W "${filenames1}" -- s > src > bash> > > As far as I can tell, the variables $filenames and $filenames1 have > the same values. Yet, they behave differently when used in an > argument. Is there some hidden aspect to a bash variable that I'm > not seeing?
Any chance you could skip the loop and the ls entirely? [EMAIL PROTECTED]:~$ ls bash-test doc resources src [EMAIL PROTECTED]:~$ f=$(cd bash-test; echo *) [EMAIL PROTECTED]:~$ compgen -W "$f" -- s src -- Larry p.s. Disclaimer: I'm new to bash and don't have a good idea what compgen is supposed to do, but it seems to pass your test case.