Перекрывающиеся данные при изменении значений переменных в скрипте оболочки Ubuntu 9.04 для ARM

Я создал сценарий оболочки в /etc/init.d/ запустить / остановить мое приложение. Сценарий основан на файле скелета, который изначально находился в /etc/init.d, Этот скрипт импортирует переменные из xxx.conf конфигурационный файл.

# Read configuration variable file if it is present
[ -r /etc/xxx.conf ] && . /etc/xxx.conf

При назначении каждой импортируемой переменной и выводе значения с помощью echo это работает хорошо.

local A
A=$imported1
#print out exactly actual value of imported1
echo $A
local B
B=$imported2
#print out exactly actual value of imported1
echo $B
local C
C=$imported3
#print out exactly actual value of imported3
echo $C

Однако при изменении A, B и C в новую строку или даже при внесении изменений imported1, imported2, а также imported3 в новую строку эти значения будут перекрывать друг друга.

local D
D="$A $B $C"
#print out value is overlap string of A,B and C instead of 'A B C'
echo $D
D="$imported1 $imported2 $imported3" 
#print out value is overlap string of imported1 ,imported2  and 
#imported3,as same as result when do echo "$A $B $C"
echo $D 

Как правильно изменить эти импортированные переменные?

1 ответ

Решение

Я подозреваю, что у вас могут быть некоторые управляющие символы, скрытые в ваших переменных. Вероятно, возврат каретки, который перемещает курсор в начало строки, когда вы печатаете его в терминал.

Вы можете сделать возврат каретки многими разными способами - этот пример будет использовать echo -e "\r":

A="$(echo -en 'A LONG WORD\r')"
B="$(echo -en 'short\r')"

Как и в вашем примере, печать их по отдельности будет выглядеть так, как будто они содержат только буквы:

$ echo $A
A LONG WORD
$ echo $B
shorter

Но если вы напечатаете их вместе, более поздний перекрывает предыдущий:

$ echo "$A $B"
 short WORD

Вы можете увидеть возврат каретки, если вы посмотрите на вывод с less, od -aили что-нибудь, что не интерпретирует этот управляющий символ для перемещения курсора.

Другие вопросы по тегам