On Mon, 30 Nov 2009, Lhunath (Maarten B.) wrote:
> 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.
?????
The read command has been around since the early Bourne shells.
> 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.
>
--
Chris F.A. Johnson, webmaster <http://woodbine-gerrard.com>
===================================================================
Author:
Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress)
Pro Bash Programming: Scripting the GNU/Linux Shell (2009, Apress)