kshでSQLクエリの出力を追加すると出力が破損する

kshでSQLクエリの出力を追加すると出力が破損する

私はスクリプトに初めて触れました。以下に提供されている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)

ただし、別の変数に追加すると、値全体が破損します(Hello_20160531_WORLD.txtの代わりに_WORLD.txt)。

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

echo ${NAME}

答え1

下線は_変数名の有効な部分なので、中かっこも必要ですFILENAME

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

他の応答によれば、シェルスクリプトを実行するかsqlplusを実行して、\rFILENAME割り当て行またはsqlplus出力にキャリッジリターン()があるようです。$mdatecat -vecho $mdate | cat -vexe、キャリッジリターンが追加される可能性があるCygwinに似た環境で実行されているとします。mdate=${mdate//^M/}^Mが入力された場所にcontrol-v、control-mを追加してこの問題を解決してください。

関連情報