在 shell 脚本 ubuntu 9.04 for ARM 中修改变量值时的重叠数据

Overlapped data when amend values of variables in shell script ubuntu 9.04 for ARM

我在 /etc/init.d/ 中为 start/stop 我的应用程序创建了一个 shell 脚本。该脚本基于最初位于 /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修改为新字符串,甚至将imported1imported2imported3修改为新字符串时,这些值会相互重叠其他

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 

如何正确修改这些导入的变量?

我怀疑您的变量中可能隐藏了一些控制字符。可能是回车 return,当您将光标打印到终端时,它会将光标移动到行首。

您可以return 多种不同的方式制作马车 -- 本示例将使用 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

如果您使用 lessod -a 或任何不解释该控制字符来移动光标的输出,您可以看到回车 return。