在 中使用引號和常值搭配字串 AWS CLI - AWS Command Line Interface

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

在 中使用引號和常值搭配字串 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引號規則來解譯。使用 處理時 PowerShellCommandLineToArgvW,您必須使用反斜線 逸出字元\

如需 CommandLineToArgvW中的詳細資訊 PowerShell,請參閱 Microsoft DevBlogs 中的 CommandLineToArgvW 對引號和反斜線的異常處理有何影響,Microsoft Docs 部落格中的每個人以錯誤方式引述命令列引數,以及 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 字串中傳遞。對於雙引號字串,您必須使用 逸出兩次 `\ 而不是只使用 backtick。反引號會逸出反斜線,然後使用反斜線做為 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\"}}]"

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