添加日期到 Bash 命令 - 传递 JSON 字符串 shell 扩展作为 URL 的一部分
Adding Date to Bash Command - passing a JSON string with shell expansions as part of a URL
我有一个简单的脚本:
DATE=`date +%Y-%m-%d`
COUNT=`wget -q0- 'https://url.com/query?q={"query_string":"helloworld","date":"$DATE 00:00:00"}'`
echo $COUNT
这样做时,API 无法识别 $DATE
,但是当我将 $DATE
替换为日期 (2016-10-20) 时,它工作正常.
有什么建议吗?
正如发布的那样,shell 确实 扩展了 $DATE
,但它也执行了 quote removal,这意味着 wget
看到类似以下内容的 URL:
https://url.com/query?q={query_string:helloworld,date:2016-10-20 00:00:00} # !! missing "s
如您所见,双引号丢失了;为了保留它们,用双引号将整个 URL 括起来,并 \
转义 JSON 要求的嵌入式 :
date=$(date +%Y-%m-%d)
count=$(wget -q0- "https://url.com/query?q={\"query_string\":\"helloworld\",\"date\":\"$date 00:00:00\"}")
echo "$count"
现在,wget
看到了这样的内容,如预期的那样:
https://url.com/query?q={"query_string":"helloworld","date":"2016-10-20 00:00:00"}
注:
虽然 `...`
仍然适用于命令替换,但最好养成使用其现代后继者的习惯,$(...)
- 参见 http://mywiki.wooledge.org/BashFAQ/082
我已经更改了变量名,因为最好不要使用全大写的 shell-变量名以便 avoid conflicts with environment variables and special shell variables.
shell 仅在 双 引号字符串中执行扩展,而 单 引号字符串用于 文字 .
heemayl's since-deleted answer 演示了使用带有嵌入式 \"
s 的单个双引号字符串的替代方法:将可扩展的双引号字符串夹在两个单引号文字之间:"I am \"$HOME\"."
vs. 'I am "'"$HOME"'".'
我有一个简单的脚本:
DATE=`date +%Y-%m-%d`
COUNT=`wget -q0- 'https://url.com/query?q={"query_string":"helloworld","date":"$DATE 00:00:00"}'`
echo $COUNT
这样做时,API 无法识别 $DATE
,但是当我将 $DATE
替换为日期 (2016-10-20) 时,它工作正常.
有什么建议吗?
正如发布的那样,shell 确实 扩展了 $DATE
,但它也执行了 quote removal,这意味着 wget
看到类似以下内容的 URL:
https://url.com/query?q={query_string:helloworld,date:2016-10-20 00:00:00} # !! missing "s
如您所见,双引号丢失了;为了保留它们,用双引号将整个 URL 括起来,并 \
转义 JSON 要求的嵌入式 :
date=$(date +%Y-%m-%d)
count=$(wget -q0- "https://url.com/query?q={\"query_string\":\"helloworld\",\"date\":\"$date 00:00:00\"}")
echo "$count"
现在,wget
看到了这样的内容,如预期的那样:
https://url.com/query?q={"query_string":"helloworld","date":"2016-10-20 00:00:00"}
注:
虽然
`...`
仍然适用于命令替换,但最好养成使用其现代后继者的习惯,$(...)
- 参见 http://mywiki.wooledge.org/BashFAQ/082我已经更改了变量名,因为最好不要使用全大写的 shell-变量名以便 avoid conflicts with environment variables and special shell variables.
shell 仅在 双 引号字符串中执行扩展,而 单 引号字符串用于 文字 .
heemayl's since-deleted answer 演示了使用带有嵌入式\"
s 的单个双引号字符串的替代方法:将可扩展的双引号字符串夹在两个单引号文字之间:"I am \"$HOME\"."
vs.'I am "'"$HOME"'".'