

**本文件 AWS CLI 僅適用於 第 1 版。**

我們已宣布即將end-of-support。 AWS CLI 我們建議您遷移至 第 2 AWS CLI 版。如需日期、其他詳細資訊和如何遷移的資訊，請參閱 [公告](https://aws.amazon.com/blogs/developer/cli-v1-maintenance-mode-announcement/)。如需 第 2 版的相關文件 AWS CLI，請參閱 第 [2 版使用者指南](https://docs.aws.amazon.com/cli/latest/userguide/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 中使用引號和常值搭配字串 AWS CLI
<a name="cli-usage-parameters-quoting-strings"></a>

在 AWS CLI中使用單引號和雙引號的方式主要有兩種。
+ [在包含空格的字串前後使用引號](#cli-usage-parameters-quoting-strings-around)
+ [在字串內使用引號](#cli-usage-parameters-quoting-strings-containing)

## 在包含空格的字串前後使用引號
<a name="cli-usage-parameters-quoting-strings-around"></a>

參數名稱及其值在命令列上以空格分隔。如果字串值包含內嵌空間，則必須以引號括住整個字串，以防止 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 文件*中的[關於引號規則](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-7)。

------
#### [ Windows command prompt ]

使用雙引號 `" "`。

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

------

您也可以使用等號 `=` 而非空格來將參數名稱與數值分開。通常只有當參數值的開頭為連字號時，才需要這麼做。

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

## 在字串內使用引號
<a name="cli-usage-parameters-quoting-strings-containing"></a>

字串可能包含引號，且您的 Shell 可能需要逸出引號才能使其正常運作。其中一個常見的參數值類型是 JSON 字串。這很複雜，因為其在 JSON 結構中的每個元素名稱和數值前後都包含空格和雙引號 `" "`。您在命令列輸入 JSON 格式參數的方式會因您的作業系統而異。

若要在命令列中使用更進階的 JSON，請考慮使用 `jq` 之類的命令列 JSON 處理器來建立 JSON 字串。如需 `jq` 的詳細資訊，請參閱 *GitHub* 上的 [jq 儲存庫](http://stedolan.github.io/jq/)。

------
#### [ 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 文件*中的[關於引號規則](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-7)。

**警告**  
在 PowerShell 傳送命令至 之前 AWS CLI，它會判斷您的命令是使用一般 PowerShell `CommandLineToArgvW` 還是引號規則來解譯。在 PowerShell 使用 `CommandLineToArgvW` 進行處理時，您必須使用反斜線 `\` 逸出字元。  
如需 PowerShell 中 `CommandLineToArgvW` 的詳細資訊，請參閱 *Microsoft DevBlogs* 中的 [CommandLineToArgvW 對引號和反斜線的奇怪處理是怎麼回事](https://devblogs.microsoft.com/oldnewthing/20100917-00/?p=12833) (What's up with the strange treatment of quotation marks and backslashes by CommandLineToArgvW)、*Microsoft Docs Blog* 中的[大家都以錯誤方式引用命令列引數](https://docs.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way) (Everyone quotes command line arguments the wrong way)，以及 *Microsoft Docs* 中的 [CommandLineToArgvW 函數](https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-commandlinetoargvw#remarks)。  
**單引號**  
單引號 `' '` 稱為 `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` 字串中傳遞。對於雙引號字串，您必須在每個引號使用 *`\$1* 逸出兩次，而不是只用反引號。反引號會逸出反斜線，然後使用反斜線做為 `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 引號規則，請使用 Blob 將 JSON 資料直接傳遞至 AWS CLI。如需 Blobs 的詳細資訊，請參閱 [Blob](cli-usage-parameters-types.md#parameter-type-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\"}}]"
```

只有最外面的雙引號不用逸出。

------