我對腳本編寫很陌生。我想將下面給出的 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}
答案1
這是因為下劃線_
是變數名稱的有效部分,因此您還需要一個大括號FILENAME
:
NAME=${FILENAME}_${mdate}_${EXTENSION}
根據您的其他回應,您似乎\r
在 FILENAME 賦值行或 sqlplus 的輸出中也有一個回車符 ( ),位於$mdate
.透過執行cat -v
shell 腳本和/或執行以下操作來找出哪一個echo $mdate | cat -v
.因為我剛剛注意到 sqlplus.EXE文件,我假設您正在類似 Cygwin 的環境中運行,這可能會添加回車符。mdate=${mdate//^M/}
透過在輸入 ^M 的位置添加 control-v、control-m 來修復此問題。