Должны ли мы использовать символы UTF-8, такие как ⏰ в скрипте bash / shell?


36

Простой код здесь работает, как и ожидалось, на моей машине, если запущен с bash:

function ⏰(){
 date
}

Может ли быть проблема для других людей, использующих это, или это универсально?

Мне интересно, потому что я никогда не видел ничего подобного в другом исходном коде.

Изменить: Есть неограниченные возможности, его можно использовать, чтобы быстро отличить роль функции, например, с помощью смайликов.

💣 для чего-то, что может изменять или удалять файлы, 🔧, если это в процессе разработки,, для интерактивного меню ...

Я предполагаю, что мы должны создать стандарт для всего этого, но это, кажется, интересная идея.
Возможно, случайная строка из ~ 5 символов поможет нам лучше понять, что делает код. (Конечно, нам нужно научиться их читать.)

Больше редактировать: я даю ему шанс. На данный момент, если я сложу все свои функции в моем редакторе (или cat myscript.sh|grep function), они будут выглядеть следующим образом. (Мой юникод выглядит намного лучше в geanyмоем терминале, чем здесь.)

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

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


8
Я бы сказал, что это небезопасно по причине несовместимости, если вы должны использовать свой скрипт на старом сервере, это может не сработать, так как поддержка bash emoji недавно. но это, вероятно, нормально на недавнем Linux.
Kiwy

18
@ Ипор нет, он обозначает Unicode (а «Uni» в Unicode означает универсальный).
Стивен Китт

5
Насколько «универсальным» вы хотите быть универсальным? Работает на Cygwin, с обычными проблемами UTF-8 против UTF-16? В современных системных службах IBM z / OS, которые все еще имеют дело с кодировкой EBCDIC? На исторических компьютерах Unix, которые не используют 8-битные байты как наименьшую единицу? Ограничение POSIX существует по причине ...
dirkt

6
Имена функций должны состоять из символов из переносимого набора символов, согласно POSIX. Если «универсальный» означает «любая оболочка», то он не будет универсальным в этом смысле.
Кусалананда

6
Если вы задаетесь вопросом, безопасно ли делать <что угодно> в сценарии оболочки, ответ, скорее всего, будет нет. Черт, даже не делать echo $fooэто безопасно.
Matteo Italia

Ответы:


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 "стандартная" клавиатура для смайликов;)
Йорн

9
@Jorn Может быть, мне следовало сказать «если вы не можете купить клавиатуру в обычном розничном магазине» ... LOL
SnakeDoc

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

2
POSIX-совместимый, но не POSIX-ограниченный?
Боб Дилан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.