Я имею общее эмпирическое правило при покупке какой-либо технической книги, избегаю тех, которые весят, больше, чем телефонная книга (помните их? ;)). Избегайте любой книги для макетов, если Вы не думаете, что Вы - макет, избегаете любого перечисленного как "Библия".
Большие книги являются маркетинговой уловкой с тоннами пробела, большого шрифта и чрезмерных примеров.
Я сожалею, что не могу ответить на Ваш вопрос конкретно, поскольку существует слишком много хороших сайтов удара онлайн. (Google для них)
Хорошие книги раньше публиковались Prentice Hall. Kernigan, Ritchie, Щука, Aho, и т.д. все использовали Prentice Hall.
Я также нашел, что O'Reily был случаен; некоторые были превосходны, другие плохо.
Посмотрите, если коротко, и краткий с меньшим количеством примеров и большим количеством упражнений, оставленных читателю. Мои 0,02$
(Это относится для избиения в случае сомнения),
Вывод одной команды или одного конвейера может быть сделан входом другой команды путем создания (или расширения существующего) конвейер:
command1 | command2
command1 | command2 | command3
Несколько команд (включая конвейеры) могут быть объединены с подоболочкой или списком (команда группы). Эта комбинация становится первой частью конвейера затем:
(command1; command2 | command3; command4) | command5
{command1; command2 | command3; command4;} | command5 # note the ; before }
Другая возможность "здесь строка" (или даже "здесь документ"):
command2 <<< $(command1)
command2 <<EOT
First input line
$(command1)
Last input line
EOT
Другие случаи
Замена команды используется, когда вывод должен быть частью командной строки т.е. если одна команда должна видеть вывод другого как его собственный параметр:
echo $(date)
эхо видит вывод date
как его параметр; как будто это было введено в командной строке.
Замена процесса делает вывод из другого процесса, появляющегося как содержание (non-seekable) файла данным как параметр на командной строке.
grep bar <(echo $'foo\nbar\nbaz')
смотрит на grep как
echo $'foo\nbar\nbaz' > /path/to/file
grep bar /path/to/file
Необходимо выполнить команды с помощью синтаксиса замены команды.
$ command < $(command2 | grep pattern)