Mục đích của câu hỏi này là để trả lời một sự tò mò, không phải để giải quyết một vấn đề điện toán cụ thể. Câu hỏi là: Tại sao các tiện ích bắt buộc POSIX không được tích hợp phổ biến trong triển khai shell?
Ví dụ: tôi có một đoạn script về cơ bản đọc một vài tệp văn bản nhỏ và kiểm tra xem chúng có được định dạng chính xác không, nhưng phải mất 27 giây để chạy, trên máy của tôi, do một số lượng thao tác chuỗi đáng kể. Thao tác chuỗi này tạo ra hàng ngàn quy trình mới bằng cách gọi các tiện ích khác nhau, do đó chậm. Tôi khá tự tin rằng nếu một số các tiện ích được xây dựng trong, cụ thể là grep
, sed
, cut
, tr
, và expr
, sau đó kịch bản sẽ chạy trong một giây hoặc ít hơn (dựa trên kinh nghiệm của tôi trong C).
Dường như sẽ có rất nhiều tình huống trong đó việc xây dựng các tiện ích này sẽ tạo ra sự khác biệt giữa việc một giải pháp trong shell script có hiệu suất chấp nhận được hay không.
Rõ ràng, có một lý do khiến nó được chọn không tích hợp các tiện ích này. Có thể có một phiên bản tiện ích ở cấp hệ thống để tránh việc có nhiều phiên bản không đồng đều của tiện ích đó được sử dụng bởi các trình bao khác nhau. Tôi thực sự không thể nghĩ ra nhiều lý do khác để duy trì quá trình tạo ra nhiều quy trình mới và POSIX định nghĩa đủ về các tiện ích mà dường như không có vấn đề gì khi có các triển khai khác nhau, miễn là chúng là mỗi POSIX tuân thủ. Ít nhất không phải là một vấn đề lớn như sự không hiệu quả của việc có quá nhiều quá trình.
printf
, v.v.) đã được tích hợp vào hệ vỏ khi chúng được coi là đủ hữu ích.
awk
là một tiện ích bắt buộc trong POSIX, và đặc biệt là rất thích hợp (có nghĩa là, rất nhanh) để thực hiện kịch bản mà bạn nếu không thể thực hiện sử dụng sed
, cut
, tr
, grep
, và expr
trong một kịch bản shell.