0

我创建了一个 shell 脚本/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, and修改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 

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

4

1 回答 1

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或任何不解释该控制字符以移动光标的内容查看输出,则可以看到回车。

于 2015-05-18T02:02:46.060 回答