2014-06-16 54 views
1

我有一个返回日期的sql查询。 我从shell脚本中调用此查询,并希望将此值分配给名为datestart的变量(并稍后使用它)。这是我的代码。如果没有datestart赋值,查询就可以正常工作。如何将查询结果分配给shell变量

#!/bin/sh 
firstname="-Upgsql" 
dbname="statcoll" 
portname="-p5438" 
datestart=(psql $firstname $portname $dbname<< EOF 
SELECT MIN(latestrefdate) FROM (SELECT MAX(referencedate) AS latestrefdate FROM statistics WHERE transactionname IN(SELECT DISTINCT transactionname FROM statistics WHERE platform = 'Smarties')GROUP BY transactionname) as earliest; 
EOF 
) 
echo $datestart 

但结果是这样的:

Syntax error: word unexpected (expecting ")"). 

我不知道我应该在哪里插入右括号。任何暗示是赞赏。

回答

1

而是在变量赋值括号你需要使用$(...)BASH`...`sh

试试这个:

#!/bin/sh 

firstname="-Upgsql" 
dbname="statcoll" 
portname="-p5438" 
datestart=`psql -t --pset="footer=off" --user="$firstname" --port="$portname" -d "$dbname"<<EOF 
SELECT MIN(latestrefdate) FROM (SELECT MAX(referencedate) AS latestrefdate FROM statistics WHERE transactionname IN (SELECT DISTINCT transactionname FROM statistics WHERE platform = 'Smarties') GROUP BY transactionname) as earliest; 
EOF 
` 
echo "$datestart" 
+0

我真的建议'$(..)'在反引号,反引号完全不互相内使用时正常工作,而嵌套表达式中使用'$(都是精品。 )' – scragar

+0

是的,它几乎解决了我的问题。代替实际的日期值,标题的内容被分配给变量。所以我期望这样的'2014-05-23',但得到'分-----(1行)'而不是 –

+0

这是由于列标题和页脚文本。请参阅[本问答](http://dba.stackexchange.com/questions/24215/how-to-turn-off-header-only-in-psql-postgresql) – anubhava

相关问题