我有一个变量,其值是使用 sql 查询找到的。
我想从该变量中删除换行符,因为我想将此变量与另一个变量连接起来。下面是代码:
dt=`sqlplus -s user/pwd@servicename <<EOF
set feedback off;
set head off;
select replace(to_char((sysdate-7),'YYYYMonDD')||'_'||to_char((sysdate-1),'YYYYMonDD'),chr(10), '') from dual;
exit;
EOF`
echo "test $dt"
答案1
如果您使用bash
,则可以使用参数扩展:
dt=${dt//$'\n'/} # Remove all newlines.
dt=${dt%$'\n'} # Remove a trailing newline.
/bin/sh
以下内容也应该适用:
dt="${dt%
}" # Remove a trailing newline.
答案2
听起来你需要“tr”,比如:
echo ${dt} | tr -d '\n'
像往常一样 man tr 了解详细信息
答案3
这在 Linux 上工作(bash):
dt="$(echo "$dt"|tr -d '\n')"
在 Linux 或其他具有 GNU 日期实用程序的系统上,这也可以获取 dt 的值:(不涉及 Oracle...)
dt="$(date -d 'yesterday' +%Y%b%d)_$(date -d '7 days ago' +%Y%b%d)"
答案4
设置页面[IZE] {14 | n} 设置每页输出的行数。您可以将 PAGESIZE 设置为零以抑制所有标题、分页符、标题、初始空行和其他格式信息。
set pagesize 0
因此,在脚本中添加 a以避免出现标题空行。
对于我的大多数脚本,我使用以下代码段中的设置:
dt=`sqlplus -s 用户/pwd@服务名 < < EOF 关闭反馈 设置页面大小 0 将修剪设置为打开 将修剪线设置为打开 设置线宽300 设置回声关闭 设置验证关闭 选择替换(to_char((sysdate-7),'YYYYMonDD')||'_' ||to_char((sysdate-1),'YYYYMonDD'),chr(10), '') 来自 Dual; 出口; EOF` 回显“测试$dt$dt”