在字符串中使用引号和文字 AWS CLI - AWS Command Line Interface

本文档 AWS CLI 仅适用于版本 1。有关版本 2 的文档 AWS CLI,请参阅版本 2 用户指南

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在字符串中使用引号和文字 AWS CLI

在 AWS CLI中使用单引号和双引号主要有两种方式。

在包含空格的字符串周围使用引号

参数名称及其值由命令行中的空格分隔。如果字符串值包含嵌入的空格,则必须用引号将整个字符串括起来,以防止将空格误解为值和下一个参数名称之间的分隔符。 AWS CLI 您使用哪种类型的引号取决于您运行的 AWS CLI 操作系统。

Linux and macOS

使用单引号 ' '

$ aws ec2 create-key-pair --key-name 'my key pair'

有关使用引号的更多信息,请参阅首选 Shell 的用户文档。

PowerShell

单引号(推荐)

单引号 ' ' 称为 verbatim 字符串。字符串与您键入的字符串完全相同,这意味着 PowerShell 变量不会通过。

PS C:\> aws ec2 create-key-pair --key-name 'my key pair'

双引号

双引号 " " 称为 expandable 字符串。变量可以在可展开的字符串中传递。

PS C:\> aws ec2 create-key-pair --key-name "my key pair"

有关使用引号的更多信息,请参阅 Microsoft PowerShell 文档中的关于报价规则

Windows command prompt

使用双引号 " "

C:\> aws ec2 create-key-pair --key-name "my key pair"

(可选)您可以用等号 = 而不是空格将参数名称和值分隔开。这通常仅在参数的值以连字符开头时有必要。

$ aws ec2 delete-key-pair --key-name=-mykey

在字符串内使用引号

字符串可能包含引号,并且您的 Shell 可能需要对引号进行转义才能让其正常发挥作用。常见的参数值类型之一是字符JSON串。这很复杂,因为它在JSON结构中的每个元素名称和值" "周围都包含空格和双引号。在命令行JSON中输入格式化参数的方式因操作系统而异。

要在命令行中JSON使用更高级的用法,可以考虑使用命令行JSON处理器(例如jq)来创建JSON字符串。有关的更多信息jq,请参阅上的 jq 存储库GitHub

Linux and macOS

要让 Linux 和 macOS 解释字符串,请使用单引号' '将JSON数据结构括起来,如下例所示。您无需对JSON字符串中嵌入的双引号进行转义,因为它们是按字面意思处理的。由于用单引号括起来,JSON因此需要对字符串中的任何单引号进行转义,这通常是在单引号前使用反斜杠来完成的。\'

$ aws ec2 run-instances \ --image-id ami-12345678 \ --block-device-mappings '[{"DeviceName":"/dev/sdb","Ebs":{"VolumeSize":20,"DeleteOnTermination":false,"VolumeType":"standard"}}]'

有关使用引号的更多信息,请参阅首选 Shell 的用户文档。

PowerShell

使用单引号 ' ' 或双引号 " "

单引号(推荐)

单引号 ' ' 称为 verbatim 字符串。字符串与您键入的字符串完全相同,这意味着 PowerShell 变量不会通过。

由于JSON数据结构包含双引号,因此我们建议使用引号' '将其括起来。如果使用引号,则无需对JSON字符串中嵌入的引号进行转义。但是,您需要在JSON结构中使用反`引号对每个引号进行转义。

PS C:\> aws ec2 run-instances ` --image-id ami-12345678 ` --block-device-mappings '[{"DeviceName":"/dev/sdb","Ebs":{"VolumeSize":20,"DeleteOnTermination":false,"VolumeType":"standard"}}]'

双引号

双引号 " " 称为 expandable 字符串。变量可以在可展开的字符串中传递。

如果使用引号,则无需对JSON字符串中嵌入的引号进行转义。但是,您需要在JSON结构中使用反`引号对每个引号进行转义,如下例所示。

PS C:\> aws ec2 run-instances ` --image-id ami-12345678 ` --block-device-mappings "[{`"DeviceName`":`"/dev/sdb`",`"Ebs`":{`"VolumeSize`":20,`"DeleteOnTermination`":false,`"VolumeType`":`"standard`"}}]"

有关使用引号的更多信息,请参阅 Microsoft PowerShell 文档中的关于报价规则

警告

在 PowerShell 向发送命令之前 AWS CLI,它会确定您的命令是使用典型规则 PowerShell 还是CommandLineToArgvW引用规则进行解释。使用 PowerShell时CommandLineToArgvW,必须使用反斜杠\对字符进行转义。

有关CommandLineToArgvW中的更多信息 PowerShell,请参阅 Microsoft 中 CommandLineToArgvW 对引号和反斜杠的奇怪处理是怎么回事 DevBlogs、每个人在 M icrosoft 文档博客中以错误的方式引用命令行参数,以及 Microsoft Docs 中的 CommandLineToArgvW 函数

单引号

单引号 ' ' 称为 verbatim 字符串。字符串与您键入的字符串完全相同,这意味着 PowerShell 变量不会通过。使用反斜杠 \ 对字符进行转义。

PS C:\> aws ec2 run-instances ` --image-id ami-12345678 ` --block-device-mappings '[{\"DeviceName\":\"/dev/sdb\",\"Ebs\":{\"VolumeSize\":20,\"DeleteOnTermination\":false,\"VolumeType\":\"standard\"}}]'

双引号

双引号 " " 称为 expandable 字符串。变量可以在 expandable 字符串中传递。对于双引号字符串,你必须使用转义两次 `\ 对于每个报价,而不仅仅使用反引号。反引号对反斜杠进行转义,然后将反斜杠用作 CommandLineToArgvW 流程的转义字符。

PS C:\> aws ec2 run-instances ` --image-id ami-12345678 ` --block-device-mappings "[{`\"DeviceName`\":`\"/dev/sdb`\",`\"Ebs`\":{`\"VolumeSize`\":20,`\"DeleteOnTermination`\":false,`\"VolumeType`\":`\"standard`\"}}]"

Blob(推荐)

要绕过JSON数据输入的 PowerShell 报价规则,请使用 Blobs 将您的JSON数据直接传递给。 AWS CLI有关 Blob 的更多信息,请参阅Blob

Windows command prompt

Windows 命令提示符需要用双引号" "将JSON数据结构括起来。此外,为防止命令处理器误解嵌入在中的双引号JSON,还必须对JSON数据结构本身"中的每个双引号进行转义(前面加一个反斜杠\字符),如下例所示。

C:\> aws ec2 run-instances ^ --image-id ami-12345678 ^ --block-device-mappings "[{\"DeviceName\":\"/dev/sdb\",\"Ebs\":{\"VolumeSize\":20,\"DeleteOnTermination\":false,\"VolumeType\":\"standard\"}}]"

只有最外层双引号不进行转义。