Bash / shell komut dosyasında ⏰ gibi UTF-8 karakterleri kullanmalı mıyız?


36

Buradaki basit kod, şu durumlarda başlatıldığında makinemde beklendiği gibi çalışıyor bash:

function ⏰(){
 date
}

Bunu kullanan diğer insanlar için bir sorun olabilir mi, yoksa evrensel mi?

Merak ediyorum, çünkü şimdilik başka bir kaynak kodda böyle bir şey görmedim.

Düzenleme: Sınırsız olasılıklar vardır, örneğin bir emojinin kullanımıyla fonksiyon rolünü hızlı bir şekilde ayırt etmek için kullanılabilir.

💣 dosyaları değiştirebilecek veya kaldırabilecek bir şey için, 🔧 devam eden bir iş ise, 📃 etkileşimli bir menü için ...

Sanırım hepsi için bir standart oluşturmalıyız, ama ilginç bir fikir gibi görünüyor.
Belki de ~ 5 karakterlik rasgele bir çizgi kodun ne yaptığını anlamamıza yardımcı olabilir. (Elbette onları nasıl okuyacağımızı öğrenmemiz gerekiyor.)

Daha fazla düzenleme: Ben bir atış veriyorum. Şimdilik, bütün fonksiyonlarımı editörümde (veya cat myscript.sh|grep function) katlarsam, şöyle görünürler. (Unicode'um geanyburada veya terminalimde burada daha iyi görünüyor .)

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

İşlevlerin birbiriyle nasıl ilişkili olduğunu göstermek için garip bir girintiye use, onların rolünü açıkça ayırt etmek için bir sembol 📃 / use kullanıyorum. (Tabii ki bunlar benim gerçek fonksiyon isimlerim değil, sadece sonunda rastgele bir mektubu koydum, ama onlar olmadan bile ilişkileri açıkça görebiliyoruz.)


8
Retro uyumlu bir nedenden dolayı güvensiz diyebilirim, betiğinizi eski sunucuda kullanmak zorunda kalırsanız bu bash emoji desteği son zamanlarda çalıştığı için işe yaramadı. ama son Linux'ta muhtemelen sorun yok.
Kiwy

18
@Ipor no, Unicode'u (ve Unicode'daki “Uni” evrensel anlamına gelir).
Stephen Kitt

5
Evrenselin ne kadar "evrensel" olmasını istersiniz? Her zamanki UTF-8 ve UTF-16 problemleriyle Cygwin'de çalışıyor mu? Hala EBCDIC karakter seti ile uğraşmak zorunda olan modern IBM z / OS sistem hizmetlerinde? En küçük birim olarak 8 bit bayt kullanmayan tarihsel Unix bilgisayarlarda? POSIX kısıtlaması bir sebepten dolayı var ...
dirkt

6
İşlevlerin adları, POSIX'e göre, taşınabilir karakter kümesindeki karakterlerden oluşmalıdır. Eğer "evrensel", "herhangi bir kabuk" anlamına gelirse, o zaman bu anlamda evrensel olmazdı.
Kusalananda

6
Bir kabuk betiğinde <her ne> yapmanın güvenli olup olmadığını sorarsanız, cevap muhtemelen hayır olur. Heck, yapmamak bile echo $foogüvenlidir.
Matteo Italia

Yanıtlar:


55

Bunun için faydalı bir kılavuz, çoğu Unix benzeri sistem tarafından uygulanan bir standart ailesi olan "Taşınabilir İşletim Sistemi Arabirimi" dir (POSIX). Kabuk komut dosyalarını farklı kabuklarda ve platformlarda kullanılabilir olduklarından emin olmak için POSIX tarafından belirlenen özelliklerle sınırlamak genellikle iyi bir fikirdir.

"Shell Command Language" deki fonksiyon tanımlarının POSIX özelliklerine göre :

İşlev fname olarak adlandırılır; Başvuru bir ad olduğundan emin olmalıdır (bkz. IEEE Std 1003.1-2001, Kısım 3.230, Ad Temel Tanımları hacmi ). Bir uygulama, bir işlev adındaki diğer karakterlerin uzantı olarak kullanılmasına izin verebilir.

Bir "isim" tanımının bağlantısını takiben :

Kabuk komut dilinde, taşınabilir karakter kümesinden yalnızca alt çizgi, rakam ve alfabeden oluşan bir kelime .

Bu karakter kümesi yalnızca U0000 ve U007E arasındaki karakterleri içerir.
Bu nedenle "⏰" (U23F0) gibi karakterler POSIX uyumlu bir tanımlayıcıda geçerli değildir.

Sizin kabuk kabul ederler belki, ama bu garanti etmez başkalarını olacak da.
Komut dosyanızı farklı platformlarda ve yazılım sürümlerinde kullanabilmek için, bunun gibi uyumlu olmayan tanımlayıcılar kullanmaktan kaçınmalısınız.


18
Temel kural ... standart klavyenizde bir tuş yoksa ... kullanmayın.
SnakeDoc

6
@SnakeDoc youtube.com/watch?v=3AtBE9BOvvk "standart" emoji klavyesi;)
Jorn

9
@Jorn Belki de "normal bir perakende mağazasından klavyeyi satın
alamazsanız

4
@ SnakeDoc Bu iyi bir başlangıç ​​- ancak bunu yazdığım klavyenin £, € ve for tümü için taşınabilir karakter kümesinin dışında bir anahtarı var. Daha ciddi olarak, bazı meslektaşlarının üzerinde ä, ö, ü, è, é ve ß tuşlu klavyeler vardır. Hepsi mektuptur ancak taşınabilir işlev adları için iyi değildir.
Martin Bonner

2
POSIX uyumlu, ancak POSIX sınırlı değil mi?
bob dylan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.