2014-06-16 53 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

相關問題