Haruskah kita menggunakan karakter UTF-8 seperti ⏰ dalam skrip bash / shell?

36

Kode sederhana di sini berfungsi seperti yang diharapkan pada mesin saya jika diluncurkan dengan bash:

function ⏰(){
 date
}

Mungkinkah ada masalah bagi orang lain yang menggunakan ini, atau itu bersifat universal?

Saya ingin tahu karena saya belum pernah melihat yang seperti ini di kode sumber lain untuk saat ini.

Sunting: Ada kemungkinan tak terbatas, dapat digunakan untuk dengan cepat membedakan peran fungsi dengan penggunaan emoji misalnya.

💣 untuk sesuatu yang dapat memodifikasi atau menghapus file, 🔧 jika sedang dalam proses, 📃 untuk menu interaktif ...

Saya kira kita harus membuat standar untuk semua itu, tetapi tampaknya itu ide yang menarik.
Mungkin garis acak ~ 5 karakter dapat membantu kita memahami apa yang dilakukan kode. (Tentu saja kita perlu belajar cara membacanya.)

Lebih banyak edit: Saya mencobanya. Untuk saat ini, jika saya melipat semua fungsi saya di editor saya (Atau cat myscript.sh|grep function) mereka terlihat seperti ini. (Unicode saya terlihat jauh lebih baik di geanyatau terminal saya dibandingkan dengan di sini.)

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

Saya menggunakan lekukan aneh ⬚ untuk menunjukkan bagaimana fungsi terkait satu sama lain dan simbol 📃 / ❓ untuk membedakan peran mereka dengan jelas. (Tentu saja ini bukan nama fungsi saya yang sebenarnya, saya hanya menaruh huruf acak di bagian akhir, tetapi bahkan tanpa mereka kita dapat dengan jelas melihat hubungan tersebut.)

bob dylan
sumber
8
Saya akan mengatakan itu tidak aman untuk alasan retrocompatible, jika Anda harus menggunakan skrip Anda di server lama ini tidak dapat berfungsi karena dukungan bash emoji baru-baru ini. tapi mungkin oke di Linux baru-baru ini.
Kiwy
18
@Ipor tidak, itu singkatan dari Unicode (dan "Uni" di Unicode adalah singkatan dari universal).
Stephen Kitt
5
Seberapa "universal" yang Anda inginkan universal? Bekerja pada Cygwin, dengan masalah UTF-8 vs UTF-16 yang biasa? Pada layanan sistem IBM z / OS modern, yang masih harus berurusan dengan rangkaian karakter EBCDIC? Pada komputer Unix historis yang tidak menggunakan byte 8-bit sebagai unit terkecil? Pembatasan POSIX ada karena suatu alasan ...
dirkt
6
Nama-nama fungsi harus terdiri dari karakter dari set karakter portabel, menurut POSIX. Jika "universal" berarti "shell", maka itu tidak universal dalam pengertian ini.
Kusalananda
6
Jika Anda bertanya apakah aman untuk melakukan <apa pun> dalam skrip shell, jawabannya kemungkinan besar tidak. Heck, bahkan tidak melakukan echo $fooitu aman.
Matteo Italia

Jawaban:

55

Pedoman yang bermanfaat untuk ini adalah "Portable Operating System Interface" (POSIX), keluarga standar yang diterapkan oleh sebagian besar sistem mirip Unix. Biasanya merupakan ide bagus untuk membatasi skrip shell ke fitur yang diamanatkan oleh POSIX untuk memastikan skrip tersebut dapat digunakan di berbagai cangkang dan platform yang berbeda.

Menurut spesifikasi definisi fungsi POSIX di "Shell Command Language" :

Fungsi ini bernama fname; aplikasi harus memastikan bahwa itu adalah nama (lihat volume Definisi Dasar dari IEEE Std 1003.1-2001, Bagian 3.230, Nama ). Implementasi dapat memungkinkan karakter lain dalam nama fungsi sebagai ekstensi.

Mengikuti tautan ke definisi "nama" :

Dalam bahasa perintah shell, kata yang hanya terdiri dari garis bawah, digit, dan alfabet dari set karakter portabel .

Set karakter itu hanya berisi karakter antara U0000 dan U007E.
Karenanya karakter seperti "⏰" (U23F0) tidak valid dalam pengidentifikasi yang sesuai dengan POSIX.

Shell Anda mungkin menerimanya, tetapi itu tidak menjamin bahwa orang lain juga akan menerimanya.
Agar dapat menggunakan skrip Anda di berbagai platform dan versi perangkat lunak, Anda harus menghindari penggunaan pengidentifikasi yang tidak patuh seperti ini.

n.st
sumber
18
Aturan praktis yang bagus ... jika keyboard standar Anda tidak memiliki kunci untuk itu ... jangan gunakan itu.
SnakeDoc
6
@SnakeDoc youtube.com/watch?v=3AtBE9BOvvk "standard" keyboard emoji;)
Jorn
9
@Jorn Mungkin saya seharusnya mengatakan "jika Anda tidak dapat membeli keyboard dari toko ritel normal" ... lol
SnakeDoc
4
@SnakeDoc Ini awal yang bagus - tetapi keyboard yang saya ketikkan ini memiliki tombol untuk £, €, dan ¬ semuanya ada di luar set karakter portabel. Lebih serius, beberapa rekan memiliki keyboard dengan ä, ö, ü, è, é, dan ß. Semuanya huruf tetapi tidak baik untuk nama fungsi portabel.
Martin Bonner mendukung Monica
2
POSIX-compliant tetapi tidak terbatas pada POSIX?
bob dylan