Bash-String-Erweiterung beschädigt

Bash-String-Erweiterung beschädigt

Ich habe folgendes:

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"

Die Ausgabe ist

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

Alle Eingaben für die Erweiterung von BINARY_FILE sehen für mich richtig aus, aber das Ergebnis ist durcheinander. Ich bin vor einigen Jahren schon einmal darauf gestoßen, kann mich aber nicht erinnern, was die Ursache dafür ist. Irgendwelche Ideen? Danke!

Antwort1

Es gibt mit ziemlicher Sicherheit etwas nicht druckbares, das die Terminalanzeige durcheinander bringt, und ich habe das Gefühl, dass es sich um ein \return-Zeichen handelt, das aus../version.hppdurch grepin $VERSION_LINEund von dort durch awkin $VERSION_STRING. Ich könnte mich irren, aber Sie solltenlaufen:

./yourscript | sed -n l

... um ein Gefühl dafür zu bekommen, was auch immer es ist.

Übrigens könnte es auch echoIhre Ausgabe verfälschen. Ein UNIX-konformerechoInterpretieren von Escape-Befehlen im C-Stilin seinen Argumenten.

verwandte Informationen