It is time to expand our repertoire. This chapter's recipes use some utilities that are not part of the shell, but which are so useful that it is hard to imagine using the shell without them.
One of the over-arching philosophies of Unix (and thus Linux) is that of small (i.e., limited in scope) program pieces that can be fit together to provide powerful results. Rather than have one program do everything, we have many different programs that each do one thing well.
That is true of bash as well. While bash is getting big and feature-rich, it still doesn't try to do everything, and there are times when it is easier to use other commands to accomplish a task even if bash can be stretched to do it.
A simple example of this is the ls command. You
needn't use ls to see the contents of your current
directory. You could just type
echo*to have filenames displayed. Or you could
even get fancier, using the bash
printf command and some formatting, etc. But
that's not really the purpose of the shell, and someone has already
provided a listing program (ls) to deal with all
sorts of variations on filesystem information.
Perhaps more importantly, by not expecting bash to provide more filesystem listing features, we avoid additional feature creep pressures on bash and instead give it some measure of independence; ls can be released with new features without requiring that we all upgrade our bash versions.
But enough philosophy—back to the practical.
What we have here ...