Dovremmo usare caratteri UTF-8 come ⏰ nello script bash / shell?


36

Il semplice codice qui funziona come previsto sulla mia macchina se lanciato con bash:

function ⏰(){
 date
}

Potrebbe esserci un problema per altre persone che usano questo, o è universale?

Mi chiedo perché non ho mai visto nulla di simile in questo altro codice sorgente per ora.

Modifica: ci sono possibilità illimitate, può essere usato per distinguere rapidamente un ruolo di funzione con l'uso di un'emoji per esempio.

A 💣 per qualcosa che può modificare o rimuovere file, a 🔧 se è un work in progress, 📃 per un menu interattivo ...

Immagino che dovremmo creare uno standard per tutto ciò, ma sembra essere un'idea interessante.
Forse una riga casuale di ~ 5 caratteri può aiutarci a capire molto cosa sta facendo il codice. (Ovviamente dobbiamo imparare a leggerli.)

Altre modifiche: ci sto provando. Per ora, se piego tutte le mie funzioni nel mio editor (o cat myscript.sh|grep function) sembrano così. (Il mio Unicode sembra molto meglio nel geanymio terminale rispetto a qui.)

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

Uso uno strano rientro ⬚ per mostrare come le funzioni sono correlate tra loro e un simbolo 📃 / ❓ per distinguere chiaramente il loro ruolo. (Naturalmente questi non sono i miei veri nomi di funzione, ho solo messo una lettera casuale alla fine, ma anche senza di loro possiamo vedere chiaramente le relazioni.)


8
Direi che non è sicuro per motivi retrocompatibili, se devi usare lo script sul vecchio server questo non potrebbe funzionare poiché il supporto emoji bash è recente. ma probabilmente va bene su Linux recente.
Kiwy,

18
@Ipor no, sta per Unicode (e "Uni" in Unicode sta per universale).
Stephen Kitt,

5
Quanto "universale" vuoi che sia universale? Funziona su Cygwin, con i soliti problemi UTF-8 vs. UTF-16? Sui moderni servizi di sistema IBM z / OS, che devono ancora fare i conti con il set di caratteri EBCDIC? Sui computer Unix storici che non utilizzano byte a 8 bit come unità più piccola? La restrizione POSIX è lì per un motivo ...
Dirkt

6
I nomi delle funzioni devono essere costituiti da caratteri del set di caratteri portatile, secondo POSIX. Se "universale" significa "qualsiasi shell", allora non sarebbe universale in questo senso.
Kusalananda

6
Se ti ritrovi a chiedere se è sicuro fare <qualsiasi cosa> in uno script di shell, la risposta è molto probabilmente no. Cavolo, nemmeno fare echo $fooè sicuro.
Matteo Italia,

Risposte:


55

Una linea guida utile per questo è la "POSIX (Portable Operating System Interface)", una famiglia di standard che viene implementata dalla maggior parte dei sistemi simili a Unix. Di solito è una buona idea limitare gli script di shell alle funzionalità richieste da POSIX per assicurarsi che siano utilizzabili su diverse shell e piattaforme.

Secondo le specifiche POSIX delle definizioni delle funzioni nel "linguaggio di comando Shell" :

La funzione si chiama fname; l'applicazione deve garantire che si tratti di un nome (vedere il volume delle definizioni di base dell'IEEE Std 1003.1-2001, Sezione 3.230, Nome ). Un'implementazione può consentire altri caratteri in un nome di funzione come estensione.

Di seguito il collegamento alla definizione di un "nome" :

Nel linguaggio dei comandi della shell, una parola composta esclusivamente da caratteri di sottolineatura, cifre e alfabeti dal set di caratteri portatile .

Quel set di caratteri contiene solo caratteri tra U0000 e U007E.
Pertanto caratteri come "⏰" (U23F0) non sono validi in un identificatore conforme a POSIX.

La tua shell potrebbe accettarli, ma ciò non garantisce che lo faranno anche gli altri .
Per poter utilizzare lo script su piattaforme e versioni software diverse, è necessario evitare di utilizzare identificatori non conformi come questo.


18
Buona regola empirica ... se la tua tastiera standard non ha una chiave per essa ... non usarla.
SnakeDoc,

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

9
@Jorn Forse avrei dovuto dire "se non puoi comprare la tastiera da un normale negozio al dettaglio" ... lol
SnakeDoc

4
@SnakeDoc È un buon inizio, ma la tastiera su cui sto digitando ha un tasto per £, € e ¬ che sono tutti al di fuori del set di caratteri portatile. Più seriamente, alcuni colleghi hanno tastiere con ä, ö, ü, è, é e ß. Sono tutte lettere ma non sono buone per i nomi delle funzioni portatili.
Martin Bonner supporta Monica il

2
Conforme POSIX ma non limitato a POSIX?
Bob Dylan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.