Существует несколько способов, связанных с оболочкой, которые включают строку «unicode literal» в строке. Например, в Bash, цитируемый механизм расширения строк, $''
, позволяет непосредственно вставлять невидимый символ: $'\u2620'
.Каков наилучший способ вставки символа Unicode в сценарий оболочки POSIX?
Однако, если вы пытаетесь написать универсальные межплатформенные shell-скрипты (как правило, это может быть усечено до «работает в Bash, Zsh и Dash.»), Это не переносная функция.
я могу переносимый достичь чего-либо в таблице ASCII (восьмеричный номер-пространство) с конструкцией, как следующее:
WHAT_A_CHARACTER="$(printf '\036')"
... Однако, POSIX/черточка printf
поддерживает только восьмеричные побеги.
Я также, очевидно, может достичь полного пространства Unicode с помощью сельского хозяйства задачу, чтобы в более полной программной среде:
OH_CAPTAIN_MY_CAPTAIN="$(ruby -e 'print "\u2388"')"
TAKE_ME_OUT_TONIGHT="$(node -e 'console.log("\u266C")')"
Итак: что лучший способ для кодирования такого символа в раковине-скрипт, что:
- Работает в
dash
,bash
иzsh
, - показывает шестнадцатеричное кодирование в элемент кода, кода
- не зависит от конкретной кодировки строки (т.е. не путем кодирования байтов UTF-8 в восьмеричном)
- и, наконец, не требует вызова любого «тяжелого» интерпретатора. (Скажем, менее 0,01 с выполнения.)
Без 2, вы можете, конечно, иметь свой персонаж дословно в источнике сценария, например, 'printf '⎈ ♬ \ n''. Если у вас есть достойный редактор, наведите курсор на него, он должен показать код; и вы также сможете ввести его (например, Ctrl + Shift + u 2388). Я не понимаю, почему 2 действительно проблема. –
@gniourf_gniourf проблема с 2 в основном состоит в том, что она * требует * достойного редактора. Существует множество ситуаций, когда я хочу, чтобы мой исходный код был доступен для тех, кто не имеет такой роскоши. Наличие специальных символов, которые имеют решающее значение для функции программы, закодированной доступным способом, открывает разработку источника для более крупной группы-участников. Это не всегда * (или даже часто!) Беспокойство, но иногда это стоит учитывать. ;) – ELLIOTTCABLE
@gniourf_gniourf (существует множество ситуаций, даже в волнении 2015 года, когда дословные документы, закодированные в Юникоде, будут искажены конвейерами, предполагающими простой ASCII или ISO-8859-1. Это печальная правда.) – ELLIOTTCABLE