Salida rota al agregar la salida de la consulta SQL en ksh

Salida rota al agregar la salida de la consulta SQL en ksh

Soy muy nuevo en las secuencias de comandos. Me gustaría agregar el resultado de la función SQL que se proporciona a continuación a otra variable, por ejemplo:

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
)
}

cuando hago eco, la salida de $mdate es perfecta. (20160531)

Pero cuando agrego otra variable, todo el valor se rompe (_WORLD.txt en lugar de Hello_20160531_WORLD.txt).

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

echo ${NAME}

Respuesta1

Esto se debe a que el guión bajo _es una parte válida del nombre de una variable, por lo que también necesitas las llaves alrededor FILENAME:

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

Según su otra respuesta, parece que también tiene un retorno de carro ( \r) en la línea de asignación FILENAME o en la salida de sqlplus, en $mdate. Descubra cuál ejecutando cat -vsu script de shell y/o haciendo echo $mdate | cat -v. Desde que acabo de notar el archivo sqlplus.exe, Supongo que estás ejecutando en un entorno similar a Cygwin, al que se le puede agregar el retorno de carro. Solucionarlo agregando mdate=${mdate//^M/}donde ingresa ^M escribiendo control-v, control-m.

información relacionada