私はスクリプトに初めて触れました。以下に提供されている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を実行して、\r
FILENAME割り当て行またはsqlplus出力にキャリッジリターン()があるようです。$mdate
cat -v
echo $mdate | cat -v
exe、キャリッジリターンが追加される可能性があるCygwinに似た環境で実行されているとします。mdate=${mdate//^M/}
^Mが入力された場所にcontrol-v、control-mを追加してこの問題を解決してください。