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 overarching 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 that does everything, we have many different programs that each do one thing well.
That applies to bash as well. While it’s 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 in filesystem information.
Perhaps more importantly, by not expecting bash to provide more filesystem listing features, we avoid additional feature creep pressures 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 ...