我正在运行以下查询
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 理解双引号是什么吗?
有两个迫在眉睫的问题:
'
(单引号)在 JSON 中不是有效的字符串分隔符;你必须使用"
(双引号):
遗憾的是,从 v7.2 开始PowerShell 要求您
\
转义内部参数"
字符在调用外部程序时,即使这不应该是必要的。
\
转义的替代方案,您可以使用 ie
模块中的 PSv3+
Native
辅助函数(在 PSv5+ 中,使用 PowerShell 中的
Install-Module Native
安装) Gallery),它在内部补偿所有损坏的行为并允许按预期传递参数;要使用它,只需在调用前添加 ie
即可;例如:ie aws dynamodb query ...
因此,试试这个;请注意
'...'
如何用于 outer 引用(PowerShell 在幕后将其转换为双引号),这样您就无需将 "
转义为字符串内的 `"
- 请注意字符串内容然后按字面意思进行处理;
然而,在调用外部程序(例如 PowerShell 7.2 中的 \
aws
转义是始终需要的:... --expression-attribute-values '{ \":d\": { \"S\": \"2018-08-15\" } }'
如果您确实需要 "..."
作为外部引用
以便使用字符串扩展(插值),即为了嵌入变量引用和表达式,事情会变得更难看,因为您需要应用 two 类型转义:
`"
首先,满足 PowerShell 的语法要求,前面加上 \
以确保生成的嵌入 "
正确传递到目标程序:$date = [datetime]::now.ToString('yyyy-MM-dd')
... --expression-attribute-values "{ \`":d\`": { \`"S\`": \`"$date\`" } }"
A here-string 可以减轻痛苦,但请注意,它总是使命令多行 - 并且需要 \
- 转义仍然适用(注意
"@
,结束分隔符必须不仅要在自己的行上,而且必须位于该行的最开始):
... --expression-attribute-values @"
{ \":d\": { \"S\": \"$date\" } }
"@
aws dynamodb query --table-name mystore --key-condition-expression "clientid = :name" --expression-attribute-values '{":name":{"S":"[email protected]"}}'
这会给
\"
)
aws dynamodb query --table-name mystore --key-condition-expression "clientid = :name" --expression-attribute-values '{\":name\":{\"S\":\"[email protected]\"}}'
避免该问题的一种方法是使用临时 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
我总是将对象双重转换为json,如下所示:
$cliValue = $myObjectGraph | ConvertTo-Json -Depth 9 -Compress | ConvertTo-Json -Depth 9;
这给了我这种形式的
$cliValue
:
"{\"ids\":[[\"94143814-c212-41b1-983f-e2d8ff589b2a\",\"My Description 1\"],[\"418a5f04-3d5a-4516-961f-6b0ab448edbb\",\"My Description 2\"], ...