我正在编写一个shell脚本,它使用sql plus获取一些值并将其放入名为“result”的变量中。
当我写回“$ result”时,输出是(正如预期的那样):
1 2029
-32 9
-19 2579
-36 1039
-35 2
-33 1336
但是当我通过电子邮件发送到我的邮箱地址时,邮件的格式为:
1 2029 -32 9 -19 2579 -36 1039 -35 2 -33 1336
这是我的代码:
result=$(sqlplus -s user/password%@IDB << EOF
set trimspool on;
set linesize 32000;
SET SPACE 0;
set HEADING off;
set feedback off;
SELECT ...
exit;
EOF)
echo -e $result | mailx -s "KLON ILK BILDIRIM SONUCLARI" $MAIL_LIST
我怎样才能把它放到正确的格式中,为什么“回声结果”和邮件格式的结果不同?
答案 0 :(得分:2)
您以不同的格式获取相同的数据,因为它在一个实例中引用,而在另一个实例中不引用。在mail命令周围加上双引号,并保留换行符:
echo "$result" | mailx -s "KLON ILK BILDIRIM SONUCLARI" $MAIL_LIST
发生这种情况的原因是shell在$result
执行之前会扩展echo
。由于默认IFS包含换行符,因此$result
中的换行符被视为字段分隔符而不是实际换行符。引用变量时,将变量内的所有内容视为单个参数,因此保留换行符。
答案 1 :(得分:1)
使用括号。您无需将结果保留在此操作的变量中。
{
sqlplus -s user/password%@IDB << EOF
something
...
exit;
EOF
} | mailx -s "KLON ILK BILDIRIM SONUCLARI" $MAIL_LIST