[英]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.