web-dev-qa-db-fra.com

Faut-il utiliser des caractères UTF-8 comme ⏰ dans le script bash / Shell?

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

function ⏰(){
 date
}
⏰

Pourrait-il y avoir un problème pour d'autres personnes qui l'utilisent, ou est-ce universel?

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

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.

UNE ???? pour quelque chose qui peut modifier ou supprimer des fichiers, un ???? si c'est 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 d'édition: je lui donne un coup de feu. Pour l'instant, si je replie toutes mes fonctions dans mon éditeur (Ou cat myscript.sh|grep function) ils ressemblent à ceci. (Mon unicode est beaucoup mieux dans geany ou 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 aléatoire à la fin, mais même sans eux, nous pouvons clairement voir les relations.)

36
bob dylan

Une directive utile à cet égard est la "Portable Operating System Interface" (POSIX), une famille de normes qui est implémentée par la plupart des systèmes de type Unix. C'est généralement une bonne idée de limiter les scripts Shell aux fonctionnalités mandatées par POSIX pour vous assurer qu'elles seront utilisables sur différents shells et plates-formes.

Selon la spécification POSIX de définitions de fonction dans le "Shell Command Language" :

La fonction est nommée fname; l'application doit s'assurer qu'il s'agit d'un nom (voir le volume Définitions de base de IEEE Std 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.

Suivre le lien vers définition d'un "nom" :

Dans le langage de commande Shell, un mot composé uniquement de traits de soulignement, de chiffres et d'alphabets du jeu de caractères portable .

Ce jeu de caractères contient uniquement des caractères compris entre U0000 et U007E.
Par conséquent, les 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 d'autres le sera également.
Pour pouvoir utiliser votre script sur différentes plates-formes et versions de logiciel, vous devez éviter d'utiliser des identifiants non conformes comme celui-ci.

55
n.st