簡體   English   中英

重擊:轉義變量

[英]Bash: escaping variables

我在寫bash one襯墊。 這有效(將日期打印到控制台或嘗試執行):

-bash-4.1$ DATE=`$(date --date="2 days ago" +%F)` echo "${DATE}"

但是這個:

`DATE=$(date --date="2 days ago" +%F)` psql -d some_db -c "select row from table where started >= '${DATE}' and started < ('${DATE}'::date + '1 day'::interval);"

給出:

ERROR:  invalid input syntax for type timestamp: ""
LINE 1: ... table where started >= '' ...

這意味着${DATE}為空。 我應該進行哪些修改才能使其正常工作?

為什么用bash進行日期數學運算? PG可以直接做到:

SELECT ... WHERE started >= (datefield - interval '2 day')
                                      ^^^^^^^^^^^^^^^^^

第一條命令被中斷有兩個原因。 首先,您以這種方式混合反引號和$()來執行date命令的輸出,就好像它是另一個命令的名稱一樣。

要將命令的輸出保存到變量,請使用以下語法:

output=$(command)

其次,該變量將在被賦值之前由外殼擴展,因此您需要將命令拆分為兩個語句:

date=$(date_command); psql -c "select ...  '$date'"

...或直接使用命令替換:

psql -c "select ...  '$(date_command)"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM