Я бы перевернул логику:
# Note that the variables 'master' and 'integration' are NOT defined yet
if [ -f '.vcs.json' ]; then
master="${`read_json -f.vcs.json -k git.master`:-master}"
integration="${`read_json -f.vcs.json -k git.integration`:-integration}"
fi
# Set default values if empty or missing
: ${master:=master} ${integration:=integration}
# They are now guaranteed to be non-empty
echo $master $integration
Если ваша iconv
реализация исходит из библиотеки GNU C, то да, она расширяема несколькими способами.
В библиотеке GNU C обработка набора символов реализована в загружаемых модулях, которые вы найдете в виде .so
файлов в/usr/lib/gconv
(или /usr/lib/x86_64-linux-gnu/gconv
или в любом другом каталоге lib
, используемом вашей системой ). Какой набор символов обрабатывается каким модулем, описано в текстовом файле /usr/lib/gconv/gconv-modules
. В зависимости от ваших требований вы можете добавить новый модуль и/или новое определение. В обоих случаях вам необходимо обновить кеши, используя iconvconfig
. Вам не нужно будет интегрировать ваши изменения в саму библиотеку C, чтобы распространять их.
В руководстве, указанном выше, содержится более подробная информация.
Другие реализацииiconv
также могут быть расширяемыми; см. местную документацию, если вы не используете библиотеку GNU C.
Предполагая, что вы используете Linux и glibc
, вы можете поддерживать дополнительные кодировки, создав один или несколько совместно загружаемых gconv
модулей.
Расположение модулей gconv
по умолчанию — /usr/lib64/gconv
в 64-битных -системах и /usr/lib/gconv
в 32-битных -системах.
См. основную информацию на справочных страницах iconv(1)
, iconv(3)
и iconvconfig(8)
.
Подробнее см. https://www.gnu.org/software/libc/manual/html_node/glibc-iconv-Implementation.html. Приведен пример структуры функции преобразования. Посмотрите на исходный код glibc
для рабочих примеров.