

# 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'
```

따옴표 사용에 대한 자세한 내용은 권장 셸에 대한 사용 설명서를 참조하십시오.

------
#### [ 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>

문자열에는 따옴표가 포함될 수 있으며 셸이 제대로 작동하려면 따옴표를 이스케이프 처리해야 할 수 있습니다. 일반적인 파라미터 값 유형 중 하나는 JSON 문자열입니다. JSON 구조의 각 요소 이름과 값 주위에 공백과 큰따옴표(`" "`)가 포함되어 있기 때문에 복잡합니다. JSON 형식의 파라미터를 명령줄에 입력하는 방법은 운영 체제에 따라 다릅니다.

명령줄에서 고급 JSON을 사용하려면 명령줄 JSON 프로세서(예: `jq`)를 사용하여 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"}}]'
```

따옴표 사용에 대한 자세한 내용은 권장 셸에 대한 사용 설명서를 참조하세요.

------
#### [ 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*의 [What's up with the strange treatment of quotation marks and backslashes by CommandLineToArgvW](https://devblogs.microsoft.com/oldnewthing/20100917-00/?p=12833), *Microsoft Docs Blog*의 [Everyone quotes command line arguments the wrong way](https://docs.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/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에 직접 전달합니다. Blob에 대한 자세한 내용은 [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\"}}]"
```

가장 바깥쪽 큰따옴표만 이스케이프되지 않습니다.

------