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 스타일 이스케이프 설명그 주장에서.

관련 정보