¿Deberíamos usar caracteres UTF-8 como ⏰ en el script bash / shell?

36

El código simple aquí funciona como se esperaba en mi máquina si se inicia con bash:

function ⏰(){
 date
}

¿Podría haber un problema para otras personas que usan esto, o es universal?

Me pregunto porque nunca he visto algo así en otro código fuente por ahora.

Editar: hay posibilidades ilimitadas, se puede usar para distinguir rápidamente una función con el uso de un emoji, por ejemplo.

A 💣 para algo que puede modificar o eliminar archivos, un 🔧 si es un trabajo en progreso, 📃 para un menú interactivo ...

Supongo que deberíamos crear un estándar para todo eso, pero parece ser una idea interesante.
Tal vez una línea aleatoria de ~ 5 caracteres puede ayudarnos a comprender mucho lo que está haciendo el código. (Por supuesto, necesitamos aprender a leerlos).

Más edición: le doy una oportunidad. Por ahora, si doblo todas mis funciones en mi editor (O cat myscript.sh|grep function) se ven así. (Mi Unicode se ve mucho mejor geanyo mi terminal en comparación con aquí).

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

Utilizo una sangría extraña ⬚ para mostrar cómo se relacionan las funciones entre sí y un símbolo 📃 / ❓ para distinguir claramente su función. (Por supuesto, estos no son los nombres de mis funciones reales, solo pongo una letra al azar al final, pero incluso sin ellos podemos ver claramente las relaciones).

Bob Dylan
fuente
8
Diría que no es seguro por razones retrocompatibles, si tiene que usar su script en el servidor anterior, esto no podría funcionar ya que el soporte de bash emoji es reciente. pero probablemente esté bien en Linux reciente.
Kiwy
18
@Ipor no, significa Unicode (y "Uni" en Unicode significa universal).
Stephen Kitt
55
¿Cuán "universal" quieres que sea universal? ¿Funciona en Cygwin, con los problemas habituales de UTF-8 frente a UTF-16? En los servicios modernos del sistema IBM z / OS, que todavía tienen que lidiar con el juego de caracteres EBCDIC? ¿En computadoras Unix históricas que no usan bytes de 8 bits como la unidad más pequeña? La restricción POSIX está ahí por una razón ...
dirkt
66
Los nombres de las funciones deben estar formados por caracteres del juego de caracteres portátil, de acuerdo con POSIX. Si "universal" significa "cualquier caparazón", entonces no sería universal en este sentido.
Kusalananda
66
Si te preguntas si es seguro hacer <whatever> en un script de shell, la respuesta es probablemente no. Diablos, ni siquiera hacerlo echo $fooes seguro.
Matteo Italia

Respuestas:

55

Una guía útil para esto es la "Interfaz del sistema operativo portátil" (POSIX), una familia de estándares implementada por la mayoría de los sistemas tipo Unix. Por lo general, es una buena idea limitar los scripts de shell a las funciones exigidas por POSIX para asegurarse de que puedan utilizarse en diferentes shells y plataformas.

De acuerdo con la especificación POSIX de las definiciones de funciones en el "Lenguaje de comandos de Shell" :

La función se llama fname; la aplicación se asegurará de que sea un nombre (consulte el volumen de Definiciones básicas de IEEE Std 1003.1-2001, Sección 3.230, Nombre ). Una implementación puede permitir otros caracteres en el nombre de una función como una extensión.

Siguiendo el enlace a la definición de un "nombre" :

En el lenguaje de comandos de shell, una palabra que consiste únicamente en guiones bajos, dígitos y alfabéticos del juego de caracteres portátil .

Ese conjunto de caracteres contiene solo caracteres entre U0000 y U007E.
Por lo tanto, caracteres como "⏰" (U23F0) no son válidos en un identificador compatible con POSIX.

Su caparazón puede aceptarlos, pero eso no garantiza que otros también lo hagan.
Para poder utilizar su script en diferentes plataformas y versiones de software, debe evitar el uso de identificadores no conformes como este.

n.st
fuente
18
Buena regla general ... si su teclado estándar no tiene una clave para ello ... no lo use.
SnakeDoc
66
@SnakeDoc youtube.com/watch?v=3AtBE9BOvvk "estándar" teclado emoji;)
Jorn
99
@Jorn Tal vez debería haber dicho "si no puedes comprar el teclado de una tienda minorista normal" ... jajaja
SnakeDoc
44
@SnakeDoc Es un buen comienzo, pero el teclado en el que estoy escribiendo esto tiene una tecla para £, € y ¬, todos los cuales están fuera del juego de caracteres portátil. Más en serio, algunos colegas tienen teclados con ä, ö, ü, è, é y ß en ellos. Todas son letras pero no son buenas para los nombres de funciones portátiles.
Martin Bonner apoya a Mónica el
2
¿Cumple con POSIX pero no está limitado a POSIX?
bob dylan