2016-07-26 26 views
1

这里使用得当是我的财产文件属性文件没有在bash

xxx.properties

SCRIPT_NAME="AAAAA" 
ENVIRON="BBB" 

这里是我的SH文件

yyy.sh

. xxx.properties 
LOG_PREFIX="$SCRIPT_NAME(${ENVIRON})" 
echo $SCRIPT_NAME 
echo $ENVIRON 
echo $LOG_PREFIX 

如果我运行yyy.sh,它显示

AAAAA 
BBB 
ABBBA <--- weird 

但是,如果我不使用属性文件,并把在SH文件中的变量它的工作原理

yyy.sh

SCRIPT_NAME="AAAAA" 
ENVIRON="BBB" 
LOG_PREFIX="$SCRIPT_NAME(${ENVIRON})" 
echo $SCRIPT_NAME 
echo $ENVIRON 
echo $LOG_PREFIX 

显示

AAAAA 
BBB 
AAAAA(BBB) <-- correct 

为什么会发生,以及如何解决问题?

谢谢!

+0

我在ubuntu上运行脚本,3.16.0-49-generic#65〜14.04.1-Ubuntu,它按预期工作 – pepero

+0

你可以运行'od -c xxx.properties'并向我们显示结果吗? – John1024

回答

2

如果我运行你的脚本,我得到了想要的结果:

$ bash yyy.sh 
AAAAA 
BBB 
AAAAA(BBB) 

如果我转换xxx.properties到DOS格式:

$ sed -i 's/$/\r/' xxx.properties 

,并再次运行该脚本,我得到的结果看起来有点类似于你:

$ bash yyy.sh 
AAAAA 
BBB 
)BBBA 

这是因为这两个SCRIPT_NAMEENVIRON现在以回车(\r)字符结束。

解决方法是在xxx.properties上运行dos2unix or similar utility以删除DOS行尾。