Bash 字符串扩展损坏

Bash 字符串扩展损坏

我有以下内容:

echo "PLATFORM = $PLATFORM"
DATE_STRING=`date +"20%y-%m-%d"`
echo "DATE_STRING = $DATE_STRING"
# VERSION_LINE will be something like: '#define VERSION_STRING "1.2p2"'
VERSION_LINE=`grep "^#define VERSION_STRING" ../version.hpp`
#  - awk pulls the "1.2p2"
#  - tr deletes the surrounding quotes
VERSION_STRING=`echo "$VERSION_LINE" | awk '{ print $3 }' | tr -d '"'`
echo "VERSION_STRING = $VERSION_STRING"
echo "####### Creating Archive ###########"
BINARY_FILE="build${PLATFORM}-${VERSION_STRING}-${DATE_STRING}_CLXXXXXXXX.zip"
echo "BINARY_FILE is $BINARY_FILE"

输出是

PLATFORM = Linux64
DATE_STRING = 2015-10-31
VERSION_STRING = 1.2p2
####### Creating Archive ###########
-2015-10-31_CLXXXXXXXX.zip4-1.2p2

BINARY_FILE 扩展的所有输入在我看来都是正确的,但结果却很糟糕。我几年前就遇到过这种情况,但永远不记得是什么原因造成的。有任何想法吗?谢谢!

答案1

几乎肯定有一些不可打印的东西在终端显示中乱七八糟,我有一种预感,它是\r从其中取出的一个返回字符../version.hppgrep进入$VERSION_LINE和从那里由awk进入$VERSION_STRING。我可能是错的,但你应该跑步:

./yourscript | sed -n l

……感受一下它是什么。

顺便说一句,它echo也很可能会影响你的输出。符合 UNIX 标准的echo意志解释 C 风格的转义在其论点中。

相关内容