Chúng ta có nên sử dụng các ký tự UTF-8 như trong tập lệnh bash / shell không?


36

Mã đơn giản ở đây đang hoạt động như mong đợi trên máy của tôi nếu được khởi chạy với bash:

function ⏰(){
 date
}

Có thể có một vấn đề cho những người khác sử dụng này, hoặc nó là phổ quát?

Tôi đang tự hỏi bởi vì tôi chưa bao giờ thấy bất cứ điều gì như thế này trong mã nguồn khác.

Chỉnh sửa: Có khả năng không giới hạn, nó có thể được sử dụng để nhanh chóng phân biệt vai trò chức năng với việc sử dụng biểu tượng cảm xúc chẳng hạn.

💣 cho một cái gì đó có thể sửa đổi hoặc xóa các tệp, nếu đó là một công việc đang tiến hành, cho một menu tương tác ...

Tôi đoán chúng ta nên tạo ra một tiêu chuẩn cho tất cả điều đó, nhưng nó dường như là một ý tưởng thú vị.
Có lẽ một dòng ngẫu nhiên ~ 5 ký tự có thể giúp chúng ta hiểu rất nhiều về mã đang làm gì. (Tất nhiên chúng ta cần học cách đọc chúng.)

Chỉnh sửa thêm: Tôi sẽ cho nó một shot. Bây giờ, nếu tôi gấp tất cả các chức năng của mình trong trình soạn thảo (Hoặc cat myscript.sh|grep function) thì chúng trông như thế này. (Unicode của tôi trông tốt hơn nhiều trong geanyhoặc thiết bị đầu cuối của tôi so với ở đây.)

function _1(){
function ⬚⬚_2(){
function ⬚⬚⬚_📃_D(){
function ⬚⬚⬚⬚_📃_X(){
function ⬚⬚⬚⬚⬚_📃_Y(){
function ⬚⬚⬚⬚⬚⬚__P(){
function ⬚⬚⬚⬚_📃_Z(){
function ⬚⬚⬚⬚⬚__U(){
function ⬚⬚⬚⬚⬚__O(){

Tôi sử dụng một vết lõm lạ để chỉ ra cách các chức năng có liên quan với nhau và ký hiệu 📃 / để phân biệt rõ vai trò của chúng. (Tất nhiên đây không phải là tên hàm thực sự của tôi, tôi chỉ đặt một chữ cái ngẫu nhiên ở cuối, nhưng ngay cả khi không có chúng, chúng ta vẫn có thể thấy rõ các mối quan hệ.)


8
Tôi muốn nói rằng nó không an toàn vì lý do tương thích retro, nếu bạn phải sử dụng tập lệnh của mình trên máy chủ cũ thì điều này không thể hoạt động vì hỗ trợ biểu tượng cảm xúc bash là gần đây. nhưng nó có thể ổn trên Linux gần đây.
Kiwy

18
@Ipor no, nó là viết tắt của Unicode (và từ Uni Uni trong chữ Unicode là viết tắt của phổ quát).
Stephen Kitt

5
Bạn muốn "phổ quát" như thế nào? Hoạt động trên Cygwin, với các vấn đề UTF-8 so với UTF-16 thông thường? Trên các dịch vụ hệ thống z / OS hiện đại của IBM, vẫn phải đối phó với bảng mã EBCDIC? Trên các máy tính Unix lịch sử không sử dụng byte 8 bit làm đơn vị nhỏ nhất? Hạn chế POSIX là có lý do ...
dirkt

6
Tên của các chức năng phải được tạo thành từ các ký tự từ bộ ký tự di động, theo POSIX. Nếu "vạn năng" có nghĩa là "bất kỳ vỏ" nào, thì nó sẽ không phổ quát theo nghĩa này.
Kusalananda

6
Nếu bạn thấy mình hỏi liệu có an toàn khi thực hiện <anything> trong tập lệnh shell hay không, câu trả lời có lẽ là không. Heck, thậm chí không làm echo $foolà an toàn.
Matteo Italia

Câu trả lời:


55

Một hướng dẫn hữu ích cho việc này là "Giao diện hệ điều hành di động" (POSIX), một nhóm các tiêu chuẩn được thực hiện bởi hầu hết các hệ thống giống như Unix. Thông thường nên giới hạn các tập lệnh shell cho các tính năng được ủy quyền bởi POSIX để đảm bảo chúng có thể sử dụng được trên các shell và nền tảng khác nhau.

Theo đặc tả POSIX của các định nghĩa hàm trong "Ngôn ngữ lệnh Shell" :

Hàm được đặt tên là fname; ứng dụng phải đảm bảo rằng đó là một tên (xem phần Định nghĩa cơ sở của IEEE Std 1003.1-2001, Mục 3.230, Tên ). Việc triển khai có thể cho phép các ký tự khác trong tên hàm dưới dạng phần mở rộng.

Theo liên kết đến định nghĩa của "tên" :

Trong ngôn ngữ lệnh shell, một từ chỉ bao gồm dấu gạch dưới, chữ số và bảng chữ cái từ bộ ký tự di động .

Bộ ký tự đó chỉ chứa các ký tự giữa U0000 và U007E.
Do đó, các ký tự như "" (U23F0) không hợp lệ trong số nhận dạng tuân thủ POSIX.

Vỏ của bạn có thể chấp nhận chúng, nhưng điều đó không đảm bảo rằng những người khác cũng sẽ như vậy.
Để có thể sử dụng tập lệnh của bạn trên các nền tảng và phiên bản phần mềm khác nhau, bạn nên tránh sử dụng các số nhận dạng không tuân thủ như thế này.


18
Nguyên tắc tốt ... nếu bàn phím tiêu chuẩn của bạn không có chìa khóa cho nó ... không sử dụng nó.
SnakeDoc

6
@SnakeDoc youtube.com/watch?v=3AtBE9BOvvk bàn phím biểu tượng cảm xúc "tiêu chuẩn";)
Jorn

9
@Jorn Có lẽ tôi nên nói "nếu bạn không thể mua bàn phím từ một cửa hàng bán lẻ bình thường" ... lol
SnakeDoc

4
@SnakeDoc Đó là một khởi đầu tốt - nhưng bàn phím tôi đang gõ này có một phím là £, € và ¬ tất cả đều nằm ngoài bộ ký tự di động. Nghiêm trọng hơn, một số đồng nghiệp có bàn phím với ä, ö, ü, è, é và ß trên chúng. Chúng đều là các chữ cái nhưng không tốt cho tên hàm di động.
Martin Bonner hỗ trợ Monica

2
Tuân thủ POSIX nhưng không giới hạn POSIX?
bob dylan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.