搭配 AWS CLI 中的字串使用引號 - AWS Command Line Interface

本文件僅適用於第 1 AWS CLI 版。如需與版本 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,請考慮使用 jq 之類的命令列 JSON 處理器來建立 JSON 字串。如需 jq 的詳細資訊,請參閱 GitHub 上的 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 文件中的關於引號規則

警告

PowerShell 向 AWS CLI 傳送命令前,會判斷該使用典型 PowerShell 或 CommandLineToArgvW 引號規則來解釋您的命令。在 PowerShell 使用 CommandLineToArgvW 進行處理時,您必須使用反斜線 \ 逸出字元。

如需 PowerShell 中 CommandLineToArgvW 的詳細資訊,請參閱 Microsoft DevBlogs 中的 CommandLineToArgvW 對引號和反斜線的奇怪處理是怎麼回事 (What's up with the strange treatment of quotation marks and backslashes by CommandLineToArgvW)、Microsoft Docs Blog 中的大家都以錯誤方式引用命令列引數 (Everyone quotes command line arguments the wrong way),以及 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 引號規則,請使用 Blob 將 JSON 資料直接傳遞至 AWS CLI。如需 Blobs 的詳細資訊,請參閱 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\"}}]"

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