在下面的shell脚本中,我连接到db并获取count值。
在下面的代码中,我没有得到正确的计数值。相反,它返回185(随机int值)
但实际应该返回的计数值是2233。
如果我用return替换echo,它将打印正确的2233值。但是alertCount变量被赋值为0。

findAlertCount(){
(
count=$(sqlplus -s  ${DBA_ORACLE_USER}/${DBA_ORACLE_PWORD}@${ORACLE_SID} <<END
#connect ${DBA_ORACLE_USER}/${DBA_ORACLE_PWORD}@${ORACLE_SID}
set serveroutput on
set linesize 1000
set heading off
set feedback off
SELECT count(1)
FROM mytable
WHERE mycolumn IS NOT NULL;
exit;
END
)
return "$count"
)
}

findAlertCount
alertCount=$?
echo "alertCount" $alertCount

//如果使用return,则打印185。如果使用echo,则打印0。

最佳答案

使用printf并在stdout函数中检索“count”的最终值。

#!/bin/sh


findAlertCount()
{
    count=2233
    printf "$count"
}

alertCount=$(findAlertCount)

printf "alertCount $alertCount\n"

另外,我观察到您使用括号()将函数体作为子shell调用。如果目的仅仅是将命令描述为集合或列表,那么可以尝试括号{},这样程序的其余部分就可以访问count的值。

10-07 16:43