Czy powinniśmy używać znaków UTF-8, takich jak ⏰, w skrypcie bash / shell?

36

Prosty kod działa tutaj zgodnie z oczekiwaniami na moim komputerze, jeśli jest uruchamiany z bash:

function ⏰(){
 date
}

Czy może być problem dla innych osób korzystających z tego, czy może jest on uniwersalny?

Zastanawiam się, ponieważ na razie nie widziałem czegoś takiego w innym kodzie źródłowym.

Edycja: Istnieją nieograniczone możliwości, można jej użyć do szybkiego rozróżnienia roli funkcji na przykład za pomocą emoji.

A dla czegoś, co może modyfikować lub usuwać pliki, 🔧 jeśli jest to praca w toku, 📃 dla interaktywnego menu ...

Myślę, że powinniśmy stworzyć standard dla tego wszystkiego, ale wydaje się to interesującym pomysłem.
Może losowa linia ~ 5 znaków może nam pomóc w zrozumieniu tego, co robi kod. (Oczywiście musimy nauczyć się je czytać.)

Więcej edycji: daję temu szansę. Na razie, jeśli złożę wszystkie moje funkcje w moim edytorze (lub cat myscript.sh|grep function), będą wyglądać tak. (Mój Unicode wygląda znacznie lepiej w geanymoim terminalu lub w porównaniu do tego tutaj.)

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

Używam dziwnego wcięcia ⬚, aby pokazać, w jaki sposób funkcje są ze sobą powiązane, oraz symbolu 📃 / ❓, aby wyraźnie rozróżnić ich rolę. (Oczywiście nie są to moje prawdziwe nazwy funkcji, po prostu umieszczam losową literę na końcu, ale nawet bez nich możemy wyraźnie zobaczyć relacje.)

Bob Dylan
źródło
8
Powiedziałbym, że jest to niebezpieczne z powodów retrokompatybilnych, jeśli musisz użyć skryptu na starym serwerze, to nie może działać, ponieważ obsługa emoji bash jest najnowsza. ale prawdopodobnie najnowszy Linux jest w porządku.
Kiwy
18
@Ipor nie, to oznacza Unicode (a „Uni” w Unicode oznacza uniwersalny).
Stephen Kitt
5
Jak „uniwersalny” ma być uniwersalny? Działa na Cygwin, ze zwykłymi problemami UTF-8 vs. UTF-16? W nowoczesnych usługach systemowych IBM z / OS, które wciąż mają do czynienia z zestawem znaków EBCDIC? Na historycznych komputerach z systemem Unix, które nie używają 8-bitowych bajtów jako najmniejszej jednostki? Ograniczenie POSIX istnieje z jakiegoś powodu ...
dniu
6
Nazwy funkcji muszą składać się ze znaków z przenośnego zestawu znaków, zgodnie z POSIX. Jeśli „uniwersalny” oznacza „dowolną powłokę”, to nie byłby uniwersalny w tym sensie.
Kusalananda
6
Jeśli zastanawiasz się, czy w skrypcie powłoki można bezpiecznie wykonać <cokolwiek>, odpowiedź brzmi prawdopodobnie nie. Cholera, nawet robienie tego nie echo $foojest bezpieczne.
Matteo Italia

Odpowiedzi:

55

Przydatną wskazówką jest „Przenośny interfejs systemu operacyjnego” (POSIX), rodzina standardów implementowana przez większość systemów uniksopodobnych. Zazwyczaj dobrym pomysłem jest ograniczenie skryptów powłoki do funkcji wymaganych przez POSIX, aby mieć pewność, że będą one dostępne na różnych powłokach i platformach.

Zgodnie ze specyfikacją POSIX definicji funkcji w „języku poleceń powłoki” :

Funkcja nazywa się fname; wniosek powinien zapewniać, że jest to nazwa (patrz tom Definicje podstawowe IEEE Std 1003.1-2001, sekcja 3.230, Nazwa ). Implementacja może dopuszczać inne znaki w nazwie funkcji jako rozszerzenie.

Po linku do definicji „nazwy” :

W języku poleceń powłoki słowo składające się wyłącznie z podkreślników, cyfr i alfabetu z przenośnego zestawu znaków .

Ten zestaw znaków zawiera tylko znaki między U0000 a U007E.
Dlatego znaki takie jak „⏰” (U23F0) nie są poprawne w identyfikatorze zgodnym z POSIX.

Twoja powłoka może je zaakceptować, ale to nie gwarantuje, że inni też to zrobią.
Aby móc korzystać ze skryptu na różnych platformach i wersjach oprogramowania, należy unikać używania takich niezgodnych identyfikatorów.

n.st
źródło
18
Dobra zasada ... jeśli twoja standardowa klawiatura nie ma do tego klawisza ... nie używaj jej.
SnakeDoc
6
@SnakeDoc youtube.com/watch?v=3AtBE9BOvvk „standardowa” klawiatura emoji;)
Jorn
9
@Jorn Może powinienem był powiedzieć „jeśli nie możesz kupić klawiatury ze zwykłego sklepu”… lol
SnakeDoc
4
@ SnakeDoc To dobry początek - ale klawiatura, na której piszę, ma klawisz £, € i ¬, wszystkie poza przenośnym zestawem znaków. Co więcej, niektórzy koledzy mają klawiatury z ä, ö, ü, è, é i ß. Wszystkie są literami, ale nie nadają się do przenośnych nazw funkcji.
Martin Bonner obsługuje Monikę
2
Zgodny z POSIX, ale nie ograniczony do POSIX?
bob dylan