AWS CLI での文字列への引用符の使用
AWS CLI では、主に、一重引用符と二重引用符の使用方法が 2 つあります。
空白を含む文字列を引用符で囲む
コマンドラインでパラメータ名とその値はスペースで区切ります。文字列値にスペースが埋め込まれている場合は、文字列全体を引用符で囲むことで、AWS CLI によってスペースが値と次のパラメータ名との区切りとして誤って解釈されないようにする必要があります。使用する引用符のタイプは、AWS CLI を実行しているオペレーティングシステムによって異なります。
- Linux and macOS
-
一重引用符 ' '
を使用します。
$
aws ec2 create-key-pair --key-name 'my key pair'
引用符の使用方法の詳細については、使用するシェルのユーザードキュメントを参照してください。
- PowerShell
-
一重引用符 (推奨)
一重引用符 ' '
を使用します。
PS C:\>
aws ec2 create-key-pair --key-name 'my key pair'
二重引用符
二重引用符 " "
を使用します。
PS C:\>
aws ec2 create-key-pair --key-name "my key pair"
引用符の使用方法の詳細については、Microsoft PowerShell ドキュメントの「About Quoting Rules」を参照してください。
- Windows command prompt
-
二重引用符 " "
を使用します。
C:\>
aws ec2 create-key-pair --key-name "my key pair"
オプションとして、パラメータ名と値をスペースの代わりに等号 =
で区切ることができます。通常、これはパラメータの値がハイフンで始まる場合にのみ必要です。
$
aws ec2 delete-key-pair --key-name=-mykey
文字列内での引用符の使用
文字列に引用符が含まれている場合があり、シェルが正しく動作するためには、引用符のエスケープが必要になることがあります。パラメータ値の一般的なタイプの 1 つとして JSON 文字列があります。JSON 構造内の各要素の名前と値の前後にスペースと二重引用符 " "
が含まれているため、これは複雑です。コマンドラインで JSON 形式のパラメータを入力する方法はオペレーティングシステムによって異なります。
コマンドラインでより高度な JSON を使用するには、jq
のようなコマンドライン JSON プロセッサを使用して JSON 文字列を作成することを検討してください。jq
の詳細については、GitHub の jq repository を参照してください。
- 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"}}]'
引用符の使用方法の詳細については、使用するシェルのユーザードキュメントを参照してください。
- 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"}}]'
二重引用符
二重引用符を使用する場合は、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 ドキュメントの「About Quoting Rules」を参照してください。
PowerShell は AWS CLI にコマンドを送信する前に、コマンドが一般的な PowerShell と CommandLineToArgvW
引用ルールのどちらを使用して解釈されるかを判断します。PowerShell を CommandLineToArgvW
使用してを処理する場合は、文字列を一重引用符 ' '
で囲み、エスケープ文字をバックスラッシュ \
で囲む必要があります。
PS C:\>
aws ec2 run-instances `
--image-id ami-12345678 `
--block-device-mappings '
[{\"
DeviceName\"
:\"
/dev/sdb\"
,\"
Ebs\"
:{\"
VolumeSize\"
:20,\"
DeleteOnTermination\"
:false,\"
VolumeType\"
:\"
standard\"
}}]'
JSON データ入力の PowerShell 引用ルールをバイパスするには、BLOB を使用して JSON データを AWS CLI に直接渡します。BLOB の詳細については、「バイナリ/Blob (バイナリラージオブジェクト) 」を参照してください。
PowerShell のCommandLineToArgvW
詳細については、 マイクロソフトドキュメントブログの「Microsoft DevBlogs の CommandLineToArgvW による引用符とバックスラッシュの奇妙な扱いの理由」を参照してください。コマンドライン引数を間違った方法で引用する人々、 および Microsoft Docs の CommandLineToArgvW 関数を参照してください 。
- 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\"
}}]"
最も外側の二重引用符のみエスケープしません。