The purpose of this question is to answer a curiosity, not to solve a particular computing problem. The question is: Why are POSIX mandatory utilities not commonly built into shell implementations?
For example, I have a script that basically reads a few small text files and checks that they are properly formatted, but it takes 27 seconds to run, on my machine, due to a significant amount of string manipulation. This string manipulation makes thousands of new processes by calling various utilities, hence the slowness. I am pretty confident that if some of the utilities were built in, namely grep
, sed
, cut
, tr
, and expr
, then the script would run in a second or less (based on my experience in C).
It seems there would be a lot of situations where building these utilities in would make the difference between whether or not a solution in shell script has acceptable performance.
Obviously, there is a reason it was chosen not to make these utilities built in. Maybe having one version of a utility at a system level avoids having multiple unequal versions of that utility being used by various shells. I really can't think of many other reasons to keep the overhead of creating so many new processes, and POSIX defines enough about the utilities that it does not seem like much of a problem to have different implementations, so long as they are each POSIX compliant. At least not as big a problem as the inefficiency of having so many processes.
printf
, etc) have been incorporated into shells when they were deemed useful enough.awk
is a mandatory utility in POSIX, and especially well suited (that is, very fast) to implement scripts that you might otherwise implement usingsed
,cut
,tr
,grep
, andexpr
in a shell script.