Việc bao gồm các mảng trong POSIX có khiến tiêu chuẩn POSIX bị phá vỡ không?
Khả năng sử dụng mảng trong bash và ksh93 rất thuận tiện khi phát sinh nhu cầu truy cập nhanh các phần tử từ nhiều mảng. Đây là một ví dụ nhanh:
#!/bin/ksh93 --
array1=(1 2 3 4 5 6 7)
array2=(8 9 10 11 12 13 14)
printf '%s\n' "Third element of array1 is ${array1[2]} and fifth element of array2 is ${array2[4]}"
Tôi nhớ rằng mình đã đọc qua rằng ít nhất một phần lý do khiến mảng không được bao gồm trong tiêu chuẩn POSIX là làm như vậy sẽ phá vỡ mọi thứ. Điều này có đúng không? Những điều gì sẽ phá vỡ?
Trả lời
Tôi không biết bạn đang đề cập đến văn bản nào, nhưng tôi khá chắc chắn rằng đây không phải là trường hợp, vì bash
và ksh93
được cho là tuân thủ POSIX và nếu các mảng làm cho vỏ POSIX bị vỡ, thì những vỏ đó sẽ không tuân thủ .
Tuy nhiên, điều đó không có nghĩa là POSIX có khả năng bao gồm chúng. Đầu tiên, bash
và ksh93
có thể không triển khai các mảng theo cùng một cách và POSIX sẽ không muốn chỉ định một tính năng hoạt động khác trong các triển khai lịch sử được triển khai rộng rãi.
Thứ hai, POSIX thường không chỉ định nhiều tính năng. Chỉ bây giờ thậm chí có một đề xuất để yêu cầu local
, được triển khai rộng rãi trong hầu hết mọi trình bao POSIX mã nguồn mở ngoại trừ ksh93
. Tương tự, có thể sử dụng vi
triển khai chỉ triển khai các tính năng POSIX, nhưng hầu hết người dùng sẽ thấy nó khá thưa thớt trên các tính năng.
Cuối cùng, POSIX thích chuẩn hóa những thứ đã có sẵn trong hầu hết các triển khai, và mảng shell không phải là thứ như vậy. dash
thiếu chúng, cũng như hầu hết các shell mà nó có chung dòng dõi, cũng như các triển khai nhỏ như busybox
. Một môi trường POSIX hoàn chỉnh có thể tương đối nhỏ và điều đó rất thuận tiện cho những người cần làm việc với các hệ thống nhúng, vì vậy những điều tốt đẹp thường bị bỏ qua để ưu tiên sự đơn giản.
Cũng lưu ý rằng chỉ vì triển khai mã nguồn mở được triển khai rộng rãi có một tính năng không có nghĩa là các môi trường Unix thương mại cũng vậy. Ngay cả khi POSIX chỉ định các mảng trong một phiên bản mới, thì phải mất nhiều năm trước khi tất cả các hệ thống đó được cập nhật để hỗ trợ chúng.