在 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修改为新字符串,甚至将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
如何正确修改这些导入的变量?
我怀疑您的变量中可能隐藏了一些控制字符。可能是回车 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
如果您使用 less
、od -a
或任何不解释该控制字符来移动光标的输出,您可以看到回车 return。
我在 /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修改为新字符串,甚至将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
如何正确修改这些导入的变量?
我怀疑您的变量中可能隐藏了一些控制字符。可能是回车 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
如果您使用 less
、od -a
或任何不解释该控制字符来移动光标的输出,您可以看到回车 return。