Перекрывающиеся данные при изменении значений переменных в скрипте оболочки 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
или что-нибудь, что не интерпретирует этот управляющий символ для перемещения курсора.