On 30 Nov 2009, at 15:56, Chris F.A. Johnson wrote: > > On Mon, 30 Nov 2009, Greg Wooledge wrote: > >> On Mon, Nov 30, 2009 at 11:46:03AM +0100, Lhunath (Maarten B.) wrote: >>> Don't use pipelines to send streams to read. Use file redirection instead: >>> >>> Instead of ''command | read var'' >>> Use ''read var < <(command)'' >>> >>> I hardly see a need to change the existing implementation. >> >> Or for the original problem case, use a here string: >> >> IFS=: read a b <<< "1:2" >> >> Between process substitutions (the <(command) thing) and here strings, >> you should be able to do all your reads without subshells. > > Or, to be portable, use a here document: > > IFS=: read a b <<. > 1:2 > . > > This works with the output of commands, too: > > IFS=- read year month day <<. > $(date +%Y-%m-%d) > .
Note that 'read' is a bash feature; not a POSIX shell feature. In that sense, "read" alone is limiting your "portability". So portability in the meaning of POSIX is out of the question. Perhaps you're talking about backward compatibility instead of portability, in which case the only compatibility gain you get from using the more verbose heredoc over the herestring is compatibiltiy with pre-2.05b-alpha1 bash. Hardly worth it.