Декодировать сообщение (может содержать специальный символ) с base64 из Bash. Сохранение файла приведет к 48 байтам данных. Но если передать его переменной, она станет 41 байт строки. Я считаю, что это вызвано тем, что Bash справляется с особыми символами (^ @).Байт-массив (может содержать специальный символ) в Bash
В качестве примера,
meow_bash=`printf $variable | base64 --decode`
echo ${#meow_bash} # return 41
printf $variable | base64 --decode > meow
wc -c meow # return 48
Теперь, если я не хочу, чтобы сохранить массив в файл в связи с деликатным характером данных. Мне также нужно использовать сценарий оболочки для этого. Есть ли способ использовать bash/sh для успешного прохождения?
^@ - это нулевой байт и не может быть сохранен как переменная bash или передан как аргумент любой программе. Не используйте bash для двоичных данных. Вы можете хранить base64 и преобразовывать его всякий раз, когда вы его пишете. –
IIRC Я также видел bash (я думаю, что это была старая версия) путается с удалением символов (hex 7f). И в зависимости от языкового стандарта некоторые инструменты могут отказаться от использования, например, последовательности, которые недействительны UTF-8, и ... Из-за этого средства оболочки, которые обрабатывают двоичные данные, будут либо брать его в base64 (или в шестнадцатеричном виде, либо в чем-то подобном), либо через каналы. –