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}
\r
Basierend 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 -v
in 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.