![在 ksh 中附加 sql 查询的输出时输出损坏](https://linux22.com/image/88972/%E5%9C%A8%20ksh%20%E4%B8%AD%E9%99%84%E5%8A%A0%20sql%20%E6%9F%A5%E8%AF%A2%E7%9A%84%E8%BE%93%E5%87%BA%E6%97%B6%E8%BE%93%E5%87%BA%E6%8D%9F%E5%9D%8F.png)
我对脚本编写很陌生。我想将下面给出的 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 来修复此问题。