Выход прерывается при добавлении вывода 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} 

  • Можно ли использовать sed для генерации файла нагрузки для таблицы фактов поиска даты?
  • Передача переменных оболочки в оператор SQL
  • Как читать поля текстового блока?
  • Awk one-liner для печати столбца таблицы SQL?
  • как разделить буферизацию на меньшие файлы csv
  • Использовать аргумент командной строки и переменную с помощью sed Inside Bash Script
  • Сценарий Bash - части chomp из строки
  • Как я могу получить SQL-запросы для отображения в выходном файле?
  • One Solution collect form web for “Выход прерывается при добавлении вывода sql-запроса в ksh”

    Это потому, что underscore _ является действительной частью имени переменной, поэтому вам также нужны фигурные скобки вокруг FILENAME :

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

    На основании вашего другого ответа, похоже, что у вас также есть возврат каретки ( \r ) в строке назначения FILENAME или выходе sqlplus в $mdate . Узнайте, как запустить cat -v в сценарии оболочки и / или выполнить echo $mdate | cat -v echo $mdate | cat -v . Поскольку я только что заметил sqlplus. exe , я предполагаю, что вы работаете в среде, подобной Cygwin, которая может добавить возврат каретки. Исправьте его, добавив mdate=${mdate//^M/} где вы введете ^ M, набрав control-v, control-m.

    Linux и Unix - лучшая ОС в мире.