我正在运行以下查询
aws dynamodb query `
--table-name user`
--key-condition-expression "datecreated = :d" `
--expression-attribute-values "{ ':d': { 'S': '2018-08-15' } }" --endpoint-url http://localhost:8000
dynamodb甚至不知道双引号是什么吗?
答案 0 :(得分:2)
当前有两个问题:
'
(单引号)在JSON中不是有效的字符串定界符;您必须使用"
(双引号):
遗憾的是, PowerShell要求您在调用外部程序时使用\
-转义参数内部的"
字符 ,即使这样应该没有必要-有关详细信息,请参见this documentation issue。
因此,请尝试此操作;请注意 '...'
是如何用于外部报价(PowerShell会将其转换为幕后的双引号),这样您就不必逃脱"
像在字符串内的`"
一样-请注意,然后从字面上看;
但是,在调用诸如\
之类的外部程序时,总是需要使用aws
转义:
... --expression-attribute-values '{ \":d\": { \"S\": \"2018-08-15\" } }'
如果确实需要 "..."
作为外部引用,则可以使用字符串扩展(插值),即嵌入变量引用和表达式,情况变得更糟,因为您需要应用两种转义:`"
,以满足PowerShell的语法要求,其次是\
,以确保生成的嵌入式{{1 }}正确地传递到目标程序:
"
here-string可以减轻痛苦,但是请注意,它总是使命令 multi-line -并且仍然需要使用$date = [datetime]::now.ToString('yyyy-MM-dd')
... --expression-attribute-values "{ \`":d\`": { \`"S\`": \`"$date\`" } }"
进行转义(请注意{ {1}},结束分隔符不仅必须在其单独的行上,而且还必须在该行的非常开始处):
\
答案 1 :(得分:1)
使用键条件表达参数时,我遇到了同样的问题
aws dynamodb query --table-name mystore --key-condition-expression "clientid = :name" --expression-attribute-values '{":name":{"S":"chris@example.com"}}'
那会给
为了解决该问题,只需将命令更改为(请注意\"
)
aws dynamodb query --table-name mystore --key-condition-expression "clientid = :name" --expression-attribute-values '{\":name\":{\"S\":\"chris@example.com\"}}'
答案 2 :(得分:0)
当我想创建一个接受参数的 bash 脚本以便我可以使用各种输入进行查询时遇到了这个问题。
避免该问题的一种方法是使用临时 json 文件。
在 bash 脚本中:
attrvalues="{\":d\": {\"S\": \"$1\"}}"
echo "$attrvalues" > attr-values.json
如果您提供 2021-01-31
作为第一个输入,它将在下面创建一个文件:
{
":d": {"S": "2021-01-31"}
}
然后在 bash 脚本中:
aws dynamodb query \
--table-name user \
--key-condition-expression "datecreated = :d" \
--expression-attribute-values file://attr-values.json \
--endpoint-url http://localhost:8000
rm attr-values.json