Чи слід використовувати UTF-8 символів типу ⏰ у скрипті bash / shell?


36

Простий код тут працює, як очікувалося, на моїй машині, якщо його запустити bash:

function ⏰(){
 date
}

Чи може бути проблема інших людей, які використовують це, чи це універсально?

Мені цікаво, тому що я ніколи не бачив нічого подібного в іншому вихідному коді.

Редагувати: Існує необмежена кількість можливостей, за допомогою якої можна швидко розрізнити функціональну роль із використанням емоджи, наприклад.

💣 для чогось, що може змінювати або видаляти файли, 🔧 якщо це незавершена робота, 📃 для інтерактивного меню ...

Я думаю, ми повинні створити стандарт для всього цього, але це здається цікавою ідеєю.
Можливо, випадковий рядок з ~ 5 символів може допомогти нам багато в чому зрозуміти, що робить код. (Звичайно, нам потрібно навчитися їх читати.)

Більше редагувати: я даю це зняти. Поки що, якщо я складу всі свої функції у своєму редакторі (Або cat myscript.sh|grep function), вони виглядають приблизно так. (Мій Unicode виглядає набагато краще в geanyабо в моєму терміналі порівняно з тут.)

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

Я використовую дивний відступ ⬚, щоб показати, як функції пов'язані між собою, і символ 📃 / ❓, щоб чітко розрізнити їх роль. (Звичайно, це не мої справжні імена функцій. Я просто кладу випадкову букву в кінці, але навіть без них ми можемо чітко бачити стосунки.)


8
Я б сказав, що це небезпечно з ретросумісних причин, якщо вам доведеться використовувати свій скрипт на старому сервері, це не може працювати, оскільки підтримка bash emoji нещодавно. але на останньому Linux це, мабуть, добре.
Ківі

18
@Ipor ні, це означає Unicode (а "Uni" в Unicode - універсальний).
Стівен Кітт

5
Наскільки "універсальним" ви хочете бути універсальним? Працює на Cygwin, зі звичайними проблемами UTF-8 проти UTF-16? Про сучасні системні сервіси IBM z / OS, яким ще належить мати справу з набором EBCDIC? На історичних комп’ютерах Unix, які не використовують 8-бітні байти як найменшу одиницю? Обмеження POSIX існує з якоїсь причини ...
dirkt

6
Назви функцій повинні складатися з символів з портативного набору символів, згідно POSIX. Якщо "універсальний" означає "будь-яку оболонку", то вона не була б універсальною в цьому сенсі.
Kusalananda

6
Якщо ви ставите запитанням, чи безпечно робити <що-небудь> в сценарії оболонки, відповідь, швидше за все, - ні. Чорт, навіть не робити echo $fooце безпечно.
Маттео Італія

Відповіді:


55

Корисним керівництвом для цього є "Інтерфейс портативної операційної системи" (POSIX), сімейство стандартів, що реалізується більшістю систем, схожих на Unix. Зазвичай корисно обмежити скрипти оболонки лише функціями, дозволеними POSIX, щоб переконатися, що вони будуть корисні для різних оболонок та платформ.

Відповідно до специфікації POSIX визначення функцій у "командній мові оболонки" :

Функція названа fname; додаток має переконатися, що це ім’я (див. том базових визначень IEEE Std 1003.1-2001, розділ 3.230, назва ). Реалізація може дозволити іншим символам у назві функції як розширення.

Перейшовши за посиланням на визначення "імені" :

У командній мові оболонки слово, що складається виключно з підкреслень, цифр та алфавітів з переносного набору символів .

Цей набір символів містить лише символи між U0000 та U007E.
Тому символи типу "⏰" (U23F0) недійсні в ідентифікаторі, сумісному з POSIX.

Ваша оболонка може їх прийняти, але це не гарантує, що й інші .
Щоб мати можливість використовувати ваш скрипт на різних платформах та версіях програмного забезпечення, вам слід уникати використання невідповідних ідентифікаторів, подібних до цього.


18
Добре правило: якщо у вашій стандартній клавіатурі немає клавіші ... не використовуйте її.
SnakeDoc

6
@SnakeDoc youtube.com/watch?v=3AtBE9BOvvk "стандартна" клавіатура смайликів;)
Jorn

9
@Jorn Можливо, я повинен був би сказати, "якщо ви не можете придбати клавіатуру в звичайному роздрібному магазині" ... lol
SnakeDoc

4
@SnakeDoc Це гарний початок - але клавіатура, яку я набираю, має клавішу £, € та ¬, які знаходяться поза набором переносних символів. Більш серйозно, деякі колеги мають клавіатури з ä, ö, ü, è, é і ß на них. Всі вони букви, але не підходять для імен портативних функцій.
Мартін Боннер підтримує Моніку

2
POSIX-сумісний, але не обмежений POSIX?
bob dylan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.