Hầu hết các mã tôi viết là trong PHP. Gần đây tôi đã bắt đầu học kịch bản shell. Hầu hết các tài nguyên và hướng dẫn mà tôi đi qua đều dành riêng cho Bash. Một số cảnh báo về bashism và một số thì không. Tôi đã đọc rất nhiều ở đây và Stack Overflow.
Bất cứ khi nào một câu trả lời sử dụng bashism , chắc chắn ai đó sẽ bình luận để nói:
Bạn không nên sử dụng <insert bashism tại đây>. Nó không phải là di động.
Điều này xảy ra ngay cả khi câu hỏi được gắn thẻ bash. Đối với tôi, điều đó giống như nói với một lập trình viên PHP rằng họ không nên sử dụng mã mới trong PHP 5 vì nó không thể được sử dụng với PHP 4. Hoặc nói với ai đó rằng họ không nên viết một cái gì đó cho Mac vì không thể sử dụng nó trên Windows.
Khi tôi viết bằng PHP, tôi chọn một yêu cầu tối thiểu và tôi viết mã tương thích về phía trước . Tôi không lo lắng về việc làm cho nó tương thích ngược .
Nếu tôi sử dụng #!/bin/bash
như shebang, tại sao tôi không nên sử dụng bashism? Tôi bắt đầu để có được ấn tượng rằng một số người giống như để bash bashisms (ý định chơi chữ) chỉ vì lợi ích của nó.
Mọi người thường sử dụng bash
và shell
hoán đổi cho nhau - có lẽ do thực tế là bash là vỏ mặc định trên nhiều hệ thống. Vì vậy, tôi có thể hiểu việc thêm một nhận xét để cảnh báo rằng mã sử dụng bashism, nhưng tôi không hiểu hàm ý rằng việc sử dụng chúng là sai .
Rõ ràng, nếu tôi đang viết một kịch bản cho mục đích cá nhân, tôi có thể viết nó bằng bất kỳ ngôn ngữ nào tôi muốn. Nhưng tôi muốn nghĩ rằng một số mã tôi viết có thể hữu ích cho những người khác.
Tôi đã cố gắng tìm kiếm một câu trả lời cho câu hỏi của tôi trước khi đăng. Tôi thấy rất nhiều thông tin về cách thức để kiểm tra cho tính di động, nhưng không thể tìm thấy bất cứ điều gì về khi điều quan trọng là phải làm như vậy.
Vì vậy, khi nào là quan trọng để viết kịch bản di động?
Ví dụ,
- Những loại kịch bản nên càng di động càng tốt?
- Làm thế nào phổ biến là các hệ thống không cài đặt Bash?
- nếu hệ thống đã Bash cài đặt, nó cũng sẽ có phiên bản GNU của find và các tiện ích khác?
bash
thẻ, một người nào đó nhận xét "Đó là bashism và không di động". Khi tôi trả lời một câu hỏi được gắn thẻ C
, tôi không quan tâm liệu nó có di động Java
hay không.
bash
tính năng cụ thể và không khả chuyển, giống như tôi chỉ ra rằng một phần mở rộng cụ thể của GNU đang được sử dụng cho một số tiện ích (mặc dù câu hỏi được gắn thẻ là Linux). Tôi chưa bao giờ thấy ai nói rằng "đây là một bashism và bạn không bao giờ nên sử dụng nó".