Devrions-nous utiliser des caractères UTF-8 comme dans un script bash / shell?

36

Le code simple fonctionne ici comme prévu sur ma machine s'il est lancé avec bash:

function ⏰(){
 date
}

Pourrait-il y avoir un problème pour les autres utilisateurs, ou est-ce universel?

Je me demande parce que je n'ai jamais rien vu de tel dans un autre code source pour le moment.

Edit: Il existe des possibilités illimitées, il peut être utilisé pour distinguer rapidement un rôle de fonction avec l'utilisation d'un emoji par exemple.

Un pour quelque chose qui peut modifier ou supprimer des fichiers, un s'il s'agit d'un travail en cours, pour un menu interactif ...

Je suppose que nous devrions créer une norme pour tout cela, mais cela semble être une idée intéressante.
Peut-être qu'une ligne aléatoire de ~ 5 caractères peut nous aider beaucoup à comprendre ce que fait le code. (Bien sûr, nous devons apprendre à les lire.)

Plus edit: Je donne un coup de feu. Pour l'instant, si je plie toutes mes fonctions dans mon éditeur (ou cat myscript.sh|grep function), elles ressemblent à ceci. (Mon unicode est beaucoup mieux dans geanyou mon terminal par rapport à ici.)

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

J'utilise une indentation étrange ⬚ pour montrer comment les fonctions sont liées les unes aux autres et un symbole / pour distinguer clairement leur rôle. (Bien sûr, ce ne sont pas mes vrais noms de fonction, je mets juste une lettre au hasard à la fin, mais même sans eux, nous pouvons clairement voir les relations.)

Bob Dylan
la source
8
Je dirais que c'est dangereux pour des raisons rétrocompatibles. Si vous devez utiliser votre script sur un ancien serveur, cela ne fonctionnera pas, car la prise en charge de bash emoji est récente. mais c'est probablement OK sous Linux récent.
Kiwy
18
@Ipor Non, il représente Unicode (et le terme “Uni” dans Unicode signifie universel).
Stephen Kitt
5
Comment "universel" voulez-vous que l'universel soit? Fonctionne sur Cygwin, avec les problèmes habituels UTF-8 vs. UTF-16? Sur les services système IBM z / OS modernes, lesquels doivent encore composer avec le jeu de caractères EBCDIC? Sur les ordinateurs Unix historiques qui n’utilisent pas les octets 8 bits comme plus petite unité? La restriction POSIX existe pour une raison ...
dirkt
6
Les noms des fonctions doivent être constitués de caractères du jeu de caractères portable, conformément à POSIX. Si "universel" signifie "toute coquille", il ne serait pas universel en ce sens.
Kusalananda
6
Si vous vous demandez s'il est prudent de faire quelque chose dans un script shell, la réponse est probablement non. Heck, ne même pas faire echo $fooest en sécurité.
Matteo Italia

Réponses:

55

Une "ligne directrice utile" est "l’interface portable du système d’exploitation" (POSIX), une famille de normes mise en oeuvre par la plupart des systèmes de type Unix. Il est généralement judicieux de limiter les scripts shell aux fonctionnalités mandatées par POSIX afin de s’assurer qu’ils seront utilisables sur différents shells et plates-formes.

Selon la spécification POSIX des définitions de fonction dans le "langage de commande shell" :

La fonction s'appelle fname; l'application doit s'assurer qu'il s'agit d'un nom (voir le volume Définitions de base de la norme IEEE 1003.1-2001, section 3.230, Nom ). Une implémentation peut autoriser d'autres caractères dans un nom de fonction en tant qu'extension.

En suivant le lien vers la définition d'un "nom" :

Dans le langage de commande shell, mot composé uniquement de caractères de soulignement, de chiffres et d’alphabétiques du jeu de caractères portable .

Ce jeu de caractères ne contient que des caractères compris entre U0000 et U007E.
Par conséquent, des caractères tels que "" (U23F0) ne sont pas valides dans un identifiant compatible POSIX.

Votre shell pourrait les accepter, mais cela ne garantit pas que les autres le feront aussi.
Pour pouvoir utiliser votre script sur différentes plates-formes et versions logicielles, évitez d'utiliser des identificateurs non conformes comme celui-ci.

n.
la source
18
Bonne règle de base ... si votre clavier standard n'a pas de clé pour cela ... ne l'utilisez pas.
SnakeDoc
6
@SnakeDoc youtube.com/watch?v=3AtBE9BOvvk clavier emoji "standard";)
Jorn
9
@Jorn J'aurais peut-être dû dire "si vous ne pouvez pas acheter le clavier dans un magasin de détail normal" ... lol
SnakeDoc
4
@ SnakeDoc C'est un bon début - mais le clavier sur lequel je tape ceci a une touche pour £, € et ¬ qui sont tous en dehors du jeu de caractères portable. Plus sérieusement, certains collègues ont des claviers avec ä, ö, ü, è, é et ß. Ce sont toutes des lettres, mais ne conviennent pas aux noms de fonctions portables.
Martin Bonner soutient Monica
2
Conforme à POSIX mais pas limité à POSIX?
Bob Dylan