Вывод поврежден при добавлении вывода SQL-запроса в ksh

Вывод поврежден при добавлении вывода SQL-запроса в ksh

Я совсем новичок в написании скриптов. Я хотел бы добавить вывод функции 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.

Связанный контент