bash скрипт, какой-то косяк...
кусок
# charset=koi8-r
# base64=./base64
# subject="=?${charset}?B?`echo привет | $base64 -e /dev/stdin /dev/stdout`?="
# echo $subject
?=koi8-r?B?0L/RgNC40LLQtdGCCg==
выводит НЕправильно!
потому что символы ?= должны быть в конце строки, должно быть:
=?koi8-r?B?0L/RgNC40LLQtdGCCg==?=
но как они в начале оказываются?? ? замещая первые два символа =?
как исправить, чтоб выводил как надо?
такое впечатление что в строке возвращенной из ` ` в конце имеется знак возврата корретки
и все что после этого, пишется в начало.. .
бред какой-то...
результат в сабжекте получается вот такой
?=koi8-r?B?0L/RgNC40LLQtdGCCg==
а должен быть
=?koi8-r?B?0L/RgNC40LLQtdGCCg==?=
в-общем решено!
так и есть из ` ` возращается строка на 1 символ длинее, последний - перенос карретки
т. е. в нашем случае длина возвращаемой строки не 20 символов, а 21
echo ${#subject}
решил проблему выделением подстроки
subject="`echo $subject | $base64 -e /dev/stdin /dev/stdout`"
subject="=?${charset}?B?${subject::${#subject}-1}?="
см. "bash работа со строками"
http://igorka.com.ua/2009-12-29/lekciya-24-bash-rabota-so-strokami/
всем спасибо за внимание
Зло, да, походу base64 добавляет символ каретки
потому что пример ниже проходит нормально
s="Privet"
s="?=koi8-r?B?`echo $s`?="
echo $s