[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Stupid shell script question about "read"



Hi list,

Could someone tell me why the following works in zsh but not in
bash/posh/dash?

benjo[3]:~% echo foo bar baz | read a b c
benjo[4]:~% echo $a $b $c
foo bar baz

If I try the same with bash (or other sh-compatible shells), the
variables $a $b and $c are unset.  From the bash man page:

>  read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d
>        delim] [name ...]
>               One  line  is  read  from  the  standard input, or from the file
>               descriptor fd supplied as an argument to the -u option, and  the
>               first word is assigned to the first name, the second word to the
>               second name, and so on, with leftover words and their  interven‐
>               ing  separators  assigned  to the last name.

So "read" claims to read from the standard input, but it doesn't
actually seem to happen when a pipe is involved.

Posh and dash behave like bash in this respect, so I guess that this is
not a bug, and that what zsh does is actually an extension.  So, what is
the correct POSIX-compatible way to get "read" to work as I want?

Thanks in advance,

-- 
Kevin B. McCarty <kmccarty@princeton.edu>   Physics Department
WWW: http://www.princeton.edu/~kmccarty/    Princeton University
GPG: public key ID 4F83C751                 Princeton, NJ 08544



Reply to: