

# Entrecomillado de cadenas y uso de literales en la AWS CLI
<a name="cli-usage-parameters-quoting-strings"></a>

Hay dos maneras principales en las que se usan comillas simples y dobles en el AWS CLI.
+ [Usar comillas alrededor de cadenas que contienen espacios en blanco](#cli-usage-parameters-quoting-strings-around)
+ [Uso de comillas dentro de cadenas](#cli-usage-parameters-quoting-strings-containing)

## Usar comillas alrededor de cadenas que contienen espacios en blanco
<a name="cli-usage-parameters-quoting-strings-around"></a>

Los nombres de los parámetros y sus valores están separados por espacios en la línea de comandos. Si un valor de cadena contiene un espacio incrustado, debe rodear toda la cadena con comillas para evitar que la AWS CLI malinterprete el espacio como un divisor entre el valor y el siguiente nombre del parámetro. El tipo de comillas que utilice depende del sistema operativo en el que esté ejecutando la AWS CLI.

------
#### [ Linux and macOS ]

Uso de comillas simples `' '` 

```
$ aws ec2 create-key-pair --key-name 'my key pair'
```

Para obtener más información sobre el uso de las comillas, consulte documentación del usuario de su shell preferido.

------
#### [ PowerShell ]

**Comillas simples (recomendadas)**

Las marcas de comillas simples `' '` se llaman cadenas `verbatim`. La cadena se pasa al comando exactamente como se escribe, lo que significa que las variables de PowerShell no pasarán.

```
PS C:\> aws ec2 create-key-pair --key-name 'my key pair'
```

**Comillas dobles**

Las marcas de comillas dobles `" "` se llaman cadenas `expandable`. Las variables se pueden pasar en cadenas expandibles.

```
PS C:\> aws ec2 create-key-pair --key-name "my key pair"
```

Para obtener más información sobre el uso de las comillas, consulte [Acerca de las reglas de entrecomillado](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-7) en los *Documentos de Microsoft PowerShell*.

------
#### [ Windows command prompt ]

Uso de comillas dobles `" "` .

```
C:\> aws ec2 create-key-pair --key-name "my key pair"
```

------

Si lo desea, puede separar el nombre del parámetro del valor con un signo de igual `=` en lugar de un espacio. Normalmente, esto solo es necesario si el valor del parámetro comienza con un guion.

```
$ aws ec2 delete-key-pair --key-name=-mykey
```

## Uso de comillas dentro de cadenas
<a name="cli-usage-parameters-quoting-strings-containing"></a>

Las cadenas pueden contener comillas y el shell puede requerir comillas de cierre para que funcionen correctamente. Uno de los tipos de valor de parámetro comunes es una cadena JSON. Esto es complejo, ya que incluye espacios y comillas dobles `" "` alrededor de cada nombre de elemento y valor en la estructura JSON. El modo en que introduzca parámetros con formato JSON en la línea de comandos varía en función de su sistema operativo. 

Para conocer un uso más avanzado de JSON en la línea de comandos, considere usar un procesador JSON de línea de comandos, como`jq`, para crear cadenas JSON. Para obtener más información sobre `jq`, consulte el [repositorio jq](http://stedolan.github.io/jq/) en *GitHub*.

------
#### [ Linux and macOS ]

Para que Linux y macOS interpreten cadenas en forma literal, use comillas simples `' '` para entrecomillar la estructura de datos JSON, como en el siguiente ejemplo. No necesita cerrar las comillas dobles incrustadas en la cadena JSON, ya que se las trata de manera literal. Dado que la cadena JSON está encerrada entre comillas simples, se deberá cerrar cualquier comilla simple en la cadena. Esto generalmente se logra usando una barra diagonal inversa antes de la comilla simple `\'`.

```
$ aws ec2 run-instances \
    --image-id ami-12345678 \
    --block-device-mappings '[{"DeviceName":"/dev/sdb","Ebs":{"VolumeSize":20,"DeleteOnTermination":false,"VolumeType":"standard"}}]'
```

Para obtener más información sobre el uso de las comillas, consulte documentación del usuario de su shell preferido.

------
#### [ PowerShell ]

Utilice comillas simples `' '` o comillas dobles `" "`.

**Comillas simples (recomendadas)**

Las marcas de comillas simples `' '` se llaman cadenas `verbatim`. La cadena se pasa al comando exactamente como se escribe, lo que significa que las variables de PowerShell no pasarán.

Dado que las estructuras de datos JSON incluyen comillas dobles, sugerimos comillas **simples** `' '` para encerrarlas. Si usa comillas **simples**, no necesita cerrar las comillas **dobles** incrustadas en la cadena JSON. Sin embargo, debe cerrar cada comilla **simple** con una tilde invertido ``` dentro de la estructura JSON.

```
PS C:\> aws ec2 run-instances `
    --image-id ami-12345678 `
    --block-device-mappings '[{"DeviceName":"/dev/sdb","Ebs":{"VolumeSize":20,"DeleteOnTermination":false,"VolumeType":"standard"}}]'
```

**Comillas dobles**

Las marcas de comillas dobles `" "` se llaman cadenas `expandable`. Las variables se pueden pasar en cadenas expandibles.

Si usa comillas **dobles**, no necesita cerrar las comillas **simples** incrustadas en la cadena JSON. Sin embargo, debe cerrar cada comilla **doble** con un acento grave ``` dentro de la estructura JSON, como con el siguiente ejemplo.

```
PS C:\> aws ec2 run-instances `
    --image-id ami-12345678 `
    --block-device-mappings "[{`"DeviceName`":`"/dev/sdb`",`"Ebs`":{`"VolumeSize`":20,`"DeleteOnTermination`":false,`"VolumeType`":`"standard`"}}]"
```

Para obtener más información sobre el uso de las comillas, consulte [Acerca de las reglas de entrecomillado](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-7) en los *Documentos de Microsoft PowerShell*.

**aviso**  
Antes de que PowerShell envíe un comando a la AWS CLI, determina si su comando se interpreta usando PowerShell típico o reglas de entrecomillado de `CommandLineToArgvW`. Cuando PowerShell procesa mediante `CommandLineToArgvW`, deben escaparse los caracteres con una barra invertida `\`.  
Para obtener más información sobre `CommandLineToArgvW` en PowerShell, consulte [¿Qué pasa con el extraño tratamiento de comillas y barras invertidas por CommandLineToArgVW?](https://devblogs.microsoft.com/oldnewthing/20100917-00/?p=12833) en *Microsoft DevBlogs*, [Todos citan los argumentos de la línea de comandos de forma incorrecta](https://docs.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way) en *Microsoft Docs Blog* y[Función CommandLineToArgVW](https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-commandlinetoargvw#remarks) en los *Documentos de Microsoft*.  
**Comillas simples**  
Las marcas de comillas simples `' '` se llaman cadenas `verbatim`. La cadena se pasa al comando exactamente como se escribe, lo que significa que las variables de PowerShell no pasarán. Los caracteres se escapan con una barra invertida`\`.  

```
PS C:\> aws ec2 run-instances `
    --image-id ami-12345678 `
    --block-device-mappings '[{\"DeviceName\":\"/dev/sdb\",\"Ebs\":{\"VolumeSize\":20,\"DeleteOnTermination\":false,\"VolumeType\":\"standard\"}}]'
```
**Comillas dobles**  
Las marcas de comillas dobles `" "` se llaman cadenas `expandable`. Las variables se pueden pasar en cadenas `expandable`. Para cadenas con comillas dobles, tiene que escapar dos veces usando *`\$1* para cada comilla en lugar de usar solo un signo de acento. La barra invertida escapa la barra invertida y, a continuación, la barra invertida se utiliza como un carácter de escape para proceso `CommandLineToArgvW`.  

```
PS C:\> aws ec2 run-instances `
    --image-id ami-12345678 `
    --block-device-mappings "[{`\"DeviceName`\":`\"/dev/sdb`\",`\"Ebs`\":{`\"VolumeSize`\":20,`\"DeleteOnTermination`\":false,`\"VolumeType`\":`\"standard`\"}}]"
```
**Blobs (recomendado)**  
Para omitir las reglas de entrecomillado de PowerShell para la entrada de datos JSON, use Blobs para pasar los datos JSON directamente a la AWS CLI. Para obtener más información acerca de Blobs, consulte o [Blob](cli-usage-parameters-types.md#parameter-type-blob).

------
#### [ Windows command prompt ]

El símbolo del sistema de Windows requiere comillas dobles `" "` para entrecomillar la estructura de datos JSON. Además, para evitar que el procesador de comandos malinterprete las comillas dobles incrustadas en el JSON, también debe cerrar (precedido por un carácter de barra invertida `\`) cada comilla doble `"` dentro de la propia estructura de datos JSON, como en el siguiente ejemplo. 

```
C:\> aws ec2 run-instances ^
    --image-id ami-12345678 ^
    --block-device-mappings "[{\"DeviceName\":\"/dev/sdb\",\"Ebs\":{\"VolumeSize\":20,\"DeleteOnTermination\":false,\"VolumeType\":\"standard\"}}]"
```

El único caso en el que no se utiliza el carácter de cierre es con las comillas dobles de los extremos.

------