On Feb 4, 2:59 pm, Stephane CHAZELAS <stephane_chaze...@yahoo.fr> wrote: > 2009-02-4, 10:50(-08), Alex Reed: > > > Can someone please explain how 'mapfile' should be used? I am trying: > > > cat file.txt | mapfile > > for i in ${MAPFILE};do echo $i; done > > > and I see no output. > > mapfile would be run in a subshell. > > Try mapfile < file.txt > > Note that the for loop syntax above is zsh's, not bash's. > > In bash (and ksh from which it derives), you need: > > for i in "${mapfi...@]}"; do echo "$i"; done > > >I've tried adding the -t option to strip > > trailing newlines. If I use the following command: > > > mapfile -u file.txt > > > I get the error: > > > bash: mapfile: file.txt: invalid file descriptor specification > > Exit 1 > > [...] > > The "help mapfile" is a bit confusing here: > > help> mapfile: mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C > callback] [-c quantum] [array] > help> Read lines from a file into an array variable. > help> > help> Read lines from the standard input into the array variable ARRAY, > or from > > Looks like the first "Read lines..." was not intentional. > > Now I wonder why a new builtin was created for that. It looks > like the same could have been done with very few lines of bash > code. Also the name is misleading at it suggests writing to the > array should write to the file (as the $mapfile associative > array in zsh), extending the "read" builtin for that would have > seemed more natural to me. > > Also, it looks like it should guard against > seq 5 | mapfile -C echo -c0 > > That command above cannot be interrupted with <Ctrl-C> > > $ seq 5 | mapfile -C echo -c1 > 1 > 2 > 3 > 4 > > I would have expected 1,2,3,4,5 above from the "help mapfile" > description. > > mapfile <&- > > hangs as well (tight loop as well, cannot be interrupted). > > -- > Stéphane
Nice. Thank you!