Мета цього питання - відповісти на цікавість, а не на вирішення конкретної обчислювальної проблеми. Питання полягає в тому, чому обов'язкові утиліти POSIX зазвичай не вбудовуються в реалізацію оболонки?
Наприклад, у мене є сценарій, який в основному зчитує кілька невеликих текстових файлів і перевіряє, чи вони належним чином відформатовані, але на моїй машині працює 27 секунд через значну кількість маніпуляцій з рядками. Ця струнна маніпуляція створює тисячі нових процесів, викликаючи різні утиліти, звідси повільність. Я досить впевнений , що якщо деякі утиліти були побудовані, а саме grep
, sed
, cut
, tr
, і expr
, то скрипт буде працювати в секунду або менше ( на основі мого досвіду в C).
Здається, було б дуже багато ситуацій, коли створення цих утиліт змінило б те, чи має рішення в скрипті оболонки прийнятну ефективність.
Очевидно, є причина, по якій не було вбудовано ці утиліти. Можливо, наявність однієї версії утиліти на системному рівні дозволяє уникнути використання декількох неоднакових версій цієї утиліти для різних оболонок. Я дійсно не можу придумати безліч інших причин, щоб утримати накладні витрати на створення такої кількості нових процесів, і POSIX визначає достатньо про утиліти, що не представляється великою проблемою мати різні реалізації, якщо вони є кожним POSIX поступливий. Принаймні, не така велика проблема, як неефективність наявності стільки процесів.
printf
тощо), були включені в оболонки, коли вони вважалися достатньо корисними.
awk
обов'язкова утиліта в POSIX, і особливо добре підходить (тобто, дуже швидко) для реалізації сценаріїв , які ви могли б реалізувати з допомогою sed
, cut
, tr
, grep
і expr
в сценарії оболонки.