Beim Anhängen der Ausgabe einer SQL-Abfrage in KSH wird die Ausgabe unterbrochen

Beim Anhängen der Ausgabe einer SQL-Abfrage in KSH wird die Ausgabe unterbrochen

Ich bin ein Neuling im Scripting. Ich möchte die Ausgabe der unten angegebenen SQL-Funktion beispielsweise einer anderen Variable hinzufügen:

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

wenn ich echoe, ist die Ausgabe von $mdate perfekt. (20160531)

Aber wenn ich es an eine andere Variable anhänge, ist der gesamte Wert beschädigt (_WORLD.txt statt Hello_20160531_WORLD.txt).

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

echo ${NAME}

Antwort1

Das liegt daran, dass der Unterstrich _ein gültiger Teil eines Variablennamens ist, sodass Sie auch die geschweiften Klammern darum benötigen FILENAME:

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

\rBasierend auf Ihrer anderen Antwort scheint es, dass Sie entweder in der FILENAME-Zuweisungszeile oder in der Ausgabe von sqlplus ebenfalls einen Wagenrücklauf () haben $mdate. Finden Sie heraus, was der Fall ist, indem Sie es cat -vin Ihrem Shell-Skript ausführen und/oder ausführen echo $mdate | cat -v. Da mir sqlplus gerade erst aufgefallen ist.exe, ich gehe davon aus, dass Sie in einer Cygwin-ähnlichen Umgebung arbeiten, in der möglicherweise der Wagenrücklauf hinzugefügt wird. Beheben Sie das Problem, indem mdate=${mdate//^M/}Sie an der Stelle, an der Sie ^M eingeben, Strg-V und Strg-M eingeben.

verwandte Informationen