Я совсем новичок в написании скриптов. Я хотел бы добавить вывод функции sql, приведенной ниже, к другой переменной, например:
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
)
}
когда я вывожу вывод из $mdate, он идеален. (20160531)
Но когда я добавляю к другой переменной, все значение оказывается поврежденным (_WORLD.txt вместо Hello_20160531_WORLD.txt).
FILENAME=Hello
EXTENSION=WORLD.txt
NAME=$FILENAME_${mdate}_${EXTENSION}
echo ${NAME}
решение1
Это связано с тем, что подчеркивание _
является допустимой частью имени переменной, поэтому вам также понадобятся фигурные скобки вокруг FILENAME
:
NAME=${FILENAME}_${mdate}_${EXTENSION}
На основании вашего другого ответа, похоже, что у вас также есть возврат каретки ( \r
) либо в строке назначения FILENAME, либо в выводе sqlplus, в $mdate
. Выясните, что именно, запустив cat -v
свой скрипт оболочки и/или выполнив echo $mdate | cat -v
. Поскольку я только что заметил sqlplus.Exe, я предполагаю, что вы работаете в среде, похожей на Cygwin, которая может добавлять возврат каретки. Исправьте это, добавив mdate=${mdate//^M/}
туда, где вы вводите ^M, набрав control-v, control-m.