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 -v
su 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.