Sollten wir UTF-8-Zeichen wie ⏰ in Bash / Shell-Skripten verwenden?

36

Der einfache Code hier funktioniert erwartungsgemäß auf meinem Computer, wenn er mit bashfolgendem Befehl gestartet wird :

function ⏰(){
 date
}

Könnte es ein Problem für andere geben, die das benutzen, oder ist es universell?

Ich frage mich, weil ich so etwas noch nie in einem anderen Quellcode gesehen habe.

Bearbeiten: Es gibt unbegrenzte Möglichkeiten, um beispielsweise bei der Verwendung eines Emoji schnell eine Funktionsrolle zu unterscheiden.

A 💣 für etwas, das Dateien ändern oder entfernen kann, A 🔧 wenn es sich um eine laufende Arbeit handelt, 📃 für ein interaktives Menü ...

Ich denke, wir sollten einen Standard für all das schaffen, aber es scheint eine interessante Idee zu sein.
Vielleicht kann uns eine zufällige Zeile mit ~ 5 Zeichen viel helfen, zu verstehen, was der Code tut. (Natürlich müssen wir lernen, wie man sie liest.)

Mehr bearbeiten: Ich gebe es eine Chance. Fürs Erste, wenn ich alle meine Funktionen in meinem Editor (oder cat myscript.sh|grep function) falte, sehen sie so aus. (Mein Unicode sieht in geanyoder in meinem Terminal viel besser aus als hier.)

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

Ich benutze einen seltsamen Einzug ⬚, um zu zeigen, wie die Funktionen zueinander in Beziehung stehen, und ein Symbol 📃 / ❓, um ihre Rolle klar zu unterscheiden. (Natürlich sind dies nicht meine eigentlichen Funktionsnamen, ich setze nur einen zufälligen Buchstaben am Ende, aber auch ohne sie können wir die Zusammenhänge klar erkennen.)

Bob Dylan
quelle
8
Ich würde sagen, es ist aus retrokompatiblen Gründen nicht sicher. Wenn Sie Ihr Skript auf einem alten Server verwenden müssen, kann dies nicht funktionieren, da die Bash-Emoji-Unterstützung neu ist. aber es ist wahrscheinlich in Ordnung auf neueren Linux.
Kiwi
18
@Ipor nein, es steht für Unicode (und die "Uni" in Unicode steht für universal).
Stephen Kitt
5
Wie "universal" soll Universal sein? Funktioniert Cygwin mit den üblichen UTF-8 vs. UTF-16 Problemen? Auf modernen IBM z / OS-Systemdiensten, die sich noch mit dem EBCDIC-Zeichensatz befassen müssen? Auf historischen Unix-Computern, die keine 8-Bit-Bytes als kleinste Einheit verwenden? Die POSIX-Einschränkung gibt es aus einem Grund ...
Dirkt
6
Die Funktionsnamen müssen laut POSIX aus Zeichen des portablen Zeichensatzes bestehen. Wenn "universal" "irgendeine Hülle" bedeutet, dann wäre es in diesem Sinne nicht universal.
Kusalananda
6
Wenn Sie sich fragen, ob es sicher ist, <whatever> in einem Shell-Skript auszuführen, lautet die Antwort höchstwahrscheinlich nein. Verdammt, nicht einmal das zu tun echo $fooist sicher.
Matteo Italia

Antworten:

55

Eine nützliche Richtlinie hierfür ist das "Portable Operating System Interface" (POSIX), eine Standardfamilie, die von den meisten Unix-ähnlichen Systemen implementiert wird. In der Regel empfiehlt es sich, Shell-Skripte auf von POSIX vorgeschriebene Funktionen zu beschränken, um sicherzustellen, dass sie für verschiedene Shells und Plattformen verwendet werden können.

Gemäß der POSIX-Spezifikation von Funktionsdefinitionen in der "Shell Command Language" :

Die Funktion heißt fname; Die Anwendung muss sicherstellen, dass es sich um einen Namen handelt (siehe Band Basisdefinitionen von IEEE Std 1003.1-2001, Abschnitt 3.230, Name ). Eine Implementierung kann andere Zeichen in einem Funktionsnamen als Erweiterung zulassen.

Folgen Sie dem Link zur Definition eines "Namens" :

In der Shell-Befehlssprache ein Wort, das ausschließlich aus Unterstrichen, Ziffern und Buchstaben aus dem portablen Zeichensatz besteht .

Dieser Zeichensatz enthält nur Zeichen zwischen U0000 und U007E.
Daher sind Zeichen wie "⏰" (U23F0) in einem POSIX-kompatiblen Bezeichner nicht gültig.

Ihre Shell akzeptiert sie vielleicht, aber das garantiert nicht, dass andere das auch tun.
Um Ihr Skript auf verschiedenen Plattformen und Softwareversionen verwenden zu können, sollten Sie solche nicht kompatiblen Bezeichner vermeiden.

n.st
quelle
18
Gute Faustregel ... wenn Ihre Standardtastatur keine Taste dafür hat ... verwenden Sie sie nicht.
SnakeDoc
6
@ SnakeDoc youtube.com/watch?v=3AtBE9BOvvk "Standard" Emoji-Tastatur;)
Jorn
9
@Jorn Vielleicht hätte ich sagen sollen: "Wenn Sie die Tastatur nicht in einem normalen Einzelhandelsgeschäft kaufen können" ... lol
SnakeDoc
4
@SnakeDoc Es ist ein guter Anfang - aber die Tastatur, auf der ich das tippe, hat eine Taste für £, € und ¬, die sich alle außerhalb des tragbaren Zeichensatzes befinden. Im Ernst, einige Kollegen haben Tastaturen mit ä, ö, ü, è, é und ß. Sie sind alle Buchstaben, eignen sich jedoch nicht für tragbare Funktionsnamen.
Martin Bonner unterstützt Monica
2
POSIX-konform, aber nicht POSIX-limitiert?
Bob Dylan