Saída quebrada ao anexar a saída da consulta sql em ksh

Saída quebrada ao anexar a saída da consulta sql em ksh

Sou muito novo em scripts. Gostaria de adicionar a saída da função sql fornecida abaixo a outra variável, por exemplo:

month_end ()
{
mdate=$($SQLPLUS_HOME/sqlplus.exe -S $DBC  << END
set pagesize 0 feedback off verify off heading off echo off;
select to_char(last_day(add_months(sysdate,-1)),'yyyymmdd') from dual;
exit;
END
)
}

quando faço eco, a saída de $ mdate é perfeita. (20160531)

Mas quando acrescento a outra variável, todo o valor é quebrado ( _WORLD.txt em vez de Hello_20160531_WORLD.txt).

FILENAME=Hello
EXTENSION=WORLD.txt
NAME=$FILENAME_${mdate}_${EXTENSION}

echo ${NAME}

Responder1

Isso ocorre porque o sublinhado _é uma parte válida do nome de uma variável, então você também precisa das chaves ao redor FILENAME:

NAME=${FILENAME}_${mdate}_${EXTENSION}

Com base na sua outra resposta, parece que você também tem um retorno de carro ( \r) na linha de atribuição FILENAME ou na saída do sqlplus, em $mdate. Descubra qual executando cat -vem seu script de shell e/ou fazendo echo $mdate | cat -v. Desde que acabei de notar o sqlplus.exe, presumo que você esteja executando em um ambiente semelhante ao Cygwin, que pode adicionar o retorno de carro. Corrija-o adicionando mdate=${mdate//^M/}onde você insere ^M digitando control-v, control-m.

informação relacionada