On Wed, Oct 03, 2007 at 02:04:25AM +0400, Alexey Tourbin wrote: > On Wed, Oct 03, 2007 at 12:54:05AM +0300, Led wrote: > > Если перед "read ..." ставить ";" или поставить его с новой строки, то > > все шеллы правы. > > Но некоторые правее. :) > > $ echo 'executable(cat)' |ksh -c 'IFS="()"; read t r; echo $t $r' > executable cat > $ echo 'executable(cat)' |zsh -c 'IFS="()"; read t r; echo $t $r' > executable cat) > $ > > Похоже на явный глюк в ksh -- типа IFS "не полностью присваивается". > (А zsh вообще особо не претендует на совместимость...) Вы меня сбили с толку -- $ echo 'executable(cat)' |ksh -c 'IFS="()"; read t r; echo "$t $r"' executable cat) $ echo 'executable(cat)' |zsh -c 'IFS="()"; read t r; echo "$t $r"' executable cat) $ (Здесь в последнем echo нужно квотить, иначе последняя скобка отрезается при подстановке параметров в echo.) Вопрос не грошовый -- как должен вести себя read если в IFS есть non-whitespace delimiter и последняя буква сроки является как раз таким delimiter? То есть в конце образовывается как бы "пустое слово". Считается ли при этом, что "переменных не хватает" (и в таком случае delimiter должен быть присоединен к строке "as is"), или же переменных "как раз нормально хватает" и последний delimimter отбрасывается? Посмотрите внимательно описание IFS и read: http://www.opengroup.org/onlinepubs/007908799/xcu/chap2.html http://www.opengroup.org/onlinepubs/007908799/xcu/read.html Вопрос не грошовый потому что это вопрос о статусе стандарта -- может ли он быть однозначно реализован или же это такой детский лепет на тему "вот как примерно должен работать шелл".