Devemos usar caracteres UTF-8 como ⏰ no script bash / shell?


36

O código simples aqui está funcionando conforme o esperado na minha máquina se iniciado com bash:

function ⏰(){
 date
}

Poderia haver um problema para outras pessoas usando isso, ou é universal?

Eu estou pensando, porque eu nunca vi nada parecido com isso em outro código-fonte por enquanto.

Editar: existem possibilidades ilimitadas, ele pode ser usado para distinguir rapidamente uma função com o uso de um emoji, por exemplo.

A para algo que pode modificar ou remover arquivos, e se for um trabalho em andamento, para um menu interativo ...

Acho que devemos criar um padrão para tudo isso, mas parece ser uma ideia interessante.
Talvez uma linha aleatória de ~ 5 caracteres possa nos ajudar a entender o que o código está fazendo. (É claro que precisamos aprender a lê-los.)

Mais editar: estou tentando. Por enquanto, se eu dobrar todas as minhas funções no meu editor (Or cat myscript.sh|grep function), elas serão assim. (Meu unicode parece muito melhor geanyou meu terminal em comparação com aqui.)

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

Uso um recuo estranho strange para mostrar como as funções estão relacionadas entre si e um símbolo 📃 / ❓ para distinguir claramente seu papel. (É claro que esses não são meus nomes reais de funções, basta colocar uma letra aleatória no final, mas mesmo sem eles, podemos ver claramente os relacionamentos.)


8
Eu diria que é inseguro por motivos retrocompatíveis, se você precisar usar seu script no servidor antigo, isso não funcionará, pois o suporte ao bash emoji é recente. mas provavelmente está tudo bem no Linux recente.
Kiwy

18
@Ipor não, significa Unicode (e o “Uni” em Unicode significa universal).
Stephen Kitt

5
Quão "universal" você quer que o universal seja? Funciona no Cygwin, com os problemas usuais de UTF-8 vs. UTF-16? Nos serviços modernos do sistema IBM z / OS, que ainda precisam lidar com o conjunto de caracteres EBCDIC? Em computadores Unix históricos que não usam bytes de 8 bits como a menor unidade? A restrição POSIX existe por uma razão ...
dirkt 27/11

6
Os nomes das funções devem ser constituídos por caracteres do conjunto de caracteres portáteis, de acordo com o POSIX. Se "universal" significa "qualquer concha", não seria universal nesse sentido.
Kusalananda

6
Se você se perguntar se é seguro fazer o que quer que seja em um script de shell, a resposta provavelmente será não. Caramba, nem mesmo fazer echo $fooé seguro.
Matteo Italia

Respostas:


55

Uma orientação útil para isso é a "Interface do sistema operacional portátil" (POSIX), uma família de padrões implementada pela maioria dos sistemas do tipo Unix. Geralmente, é uma boa idéia limitar os scripts de shell aos recursos exigidos pelo POSIX para garantir que eles sejam utilizáveis ​​em diferentes shells e plataformas.

De acordo com a especificação POSIX de definições de função na "Shell Command Language" :

A função é nomeada fname; o aplicativo deve garantir que seja um nome (consulte o volume Definições básicas da IEEE Std 1003.1-2001, Seção 3.230, Nome ). Uma implementação pode permitir outros caracteres no nome de uma função como uma extensão.

Seguindo o link para a definição de um "nome" :

Na linguagem de comando do shell, uma palavra que consiste apenas em sublinhados, dígitos e alfabéticos do conjunto de caracteres portátil .

Esse conjunto de caracteres contém apenas caracteres entre U0000 e U007E.
Portanto, caracteres como "⏰" (U23F0) não são válidos em um identificador compatível com POSIX.

Seu shell pode aceitá-los, mas isso não garante que outros o aceitem também.
Para poder usar seu script em diferentes plataformas e versões de software, evite usar identificadores não compatíveis como este.


18
Boa regra geral ... se o teclado padrão não tiver uma tecla para isso ... não o utilize.
SnakeDoc 27/11/19

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

9
@Jorn Talvez eu deveria ter dito "se você não pode comprar o teclado a partir de uma loja de varejo normal" ... lol
SnakeDoc

4
@SnakeDoc É um bom começo - mas o teclado em que estou digitando tem uma tecla para £, € e ¬, todos fora do conjunto de caracteres portáteis. Mais seriamente, alguns colegas têm teclados com ä, ö, ü, è, é e ß neles. São todas letras, mas não são boas para nomes de funções portáteis.
Martin Bonner apoia Monica

2
Compatível com POSIX, mas não limitado a POSIX?
bob dylan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.