在 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。