НТ
Наталья Трусова

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

ДП
Денис Прибылов

еще раз.. .
у тебя же написано
subject="=?${charset}?B?`echo привет | $base64 -e /dev/stdin /dev/stdout`?="
т. е.
subject = "=? - вот они в начале, потом charset и т. д. и в конце еще раз ?="

у меня получилось
=?koi8-r?B??= (ну. . base64 не нашел, поэтому выкинул) может, у тебя из ./base64 лезут передвижения каретки?

вот здесь тестил

Похожие вопросы
Как обновить bash на убе 11.04
Вопрос по настройке оповещений в BASH
Bash. Выполнить команду определённое количество раз.
Вопрос по поводу Bash-программирования
Есть вопрос linux bash програмирование
bash : case (как испровить ошибку?)
bash sed заменить строку строкой
BASH Вопрос про создание переменных
CYGWIN BASH как получить PID программы?
Помогите найти ошибку в bash скрипте