JS-string decode by Bash
Столкнулся я тут с необходимостью раскодировать строку в том формате, который используется в JSON, т. е. когда символы, кроме латиницы и ещё некоторых знаков кодируются как \uXXXX.
Можно было, конечно, вызвать какой-нибудь нормальный интерпретатор, благо на «Маке» их хватает («из коробки» есть ПХП, Перл, Пайтон, Руби, ещё что-то там), но неспортивно как-то.
Сделал на «Баше» и утилитах командной строки (кстати, легко переделать, при желании, и на «sh»):
:|sed -E '' 2>&- && SED='sed -E' || SED='sed -r'
uNNNNhelper() {
printf $(echo -n "$@") | iconv -f utf-16be
}
uNNNN() {
eval $(
echo -n "$@" |
$SED '
s/([^[:alnum:]])/\\\1/g
s/^/echo /
s/((\\\\[Uu]....)+)/$(uNNNNhelper \1)/g
s/\\\\[Uu](..)(..)/\\\\x\1\\\\x\2/g
'
)
}
uNNNN 'Hello, \U043C\U0438\U0440!' # выведет «Hello, мир!»
Да, не всякий код нуждается в обфускации :)
Комментарий для Читатель:
Это очень простой код :) Тут просто регулярные выражения (правда простые очень), если их знать, читается запросто. У меня есть образец действительно головоломного bash-кода, не моего авторства, как-нибудь покажу.