Expansão de String Bash corrompida

2

Eu tenho o seguinte:

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"

A saída é

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

Todas as entradas para a expansão do BINARY_FILE parecem certas para mim, mas o resultado está estragado. Eu me deparei com isso há vários anos, mas nunca consigo lembrar o que causa isso. Alguma ideia? Obrigado!

    
por Tim 31.10.2015 / 22:07

1 resposta

5

Há quase definitivamente algo não imprimível em meio à exibição do terminal, e eu tenho um palpite de que é um caractere \r eturn obtido de ../version.hpp por grep em $VERSION_LINE e daí por awk em $VERSION_STRING . Eu posso estar errado, mas você deve executar :

./yourscript | sed -n l

... para ter uma ideia do que quer que seja.

A propósito, pode muito bem ser echo aparafusando sua saída também. Um echo compatível com os padrões UNIX interpreta os escapes do estilo C em seus argumentos.

    
por 31.10.2015 / 22:39

Tags