# Interpolación




Los valores en un archivo de Compose se pueden definir mediante variables e interpolar en tiempo de ejecución. Los archivos de Compose utilizan una sintaxis similar a Bash `${VARIABLE}`. Se admiten tanto la sintaxis `$VARIABLE` como `${VARIABLE}`.


Para las expresiones entre llaves, se admiten los siguientes formatos:
- Sustitución directa
  - `${VAR}` -> valor de `VAR`
- Valor predeterminado
  - `${VAR:-default}` -> valor de `VAR` si está definida y no está vacía; de lo contrario, `default`
  - `${VAR-default}` -> valor de `VAR` si está definida; de lo contrario, `default`
- Valor obligatorio
  - `${VAR:?error}` -> valor de `VAR` si está definida y no está vacía; de lo contrario, sale con un error
  - `${VAR?error}` -> valor de `VAR` si está definida; de lo contrario, sale con un error
- Valor alternativo
  - `${VAR:+replacement}` -> `replacement` si `VAR` está definida y no está vacía; de lo contrario, vacío
  - `${VAR+replacement}` -> `replacement` si `VAR` está definida; de lo contrario, vacío

La interpolación también se puede anidar:

- `${VARIABLE:-${FOO}}`
- `${VARIABLE?$FOO}`
- `${VARIABLE:-${FOO:-default}}`

Compose no admite otras funciones de estilo shell extendido, como `${VARIABLE/foo/bar}`.

Compose procesa cualquier cadena que siga a un símbolo `$` siempre que constituya una definición de variable válida: ya sea un nombre alfanumérico (`[_a-zA-Z][_a-zA-Z0-9]*`) o una cadena entre llaves que comience con `${`. En otras circunstancias, se conservará sin intentar interpolar ningún valor.

Puedes utilizar `$$` (doble símbolo de dólar) cuando tu configuración requiera un símbolo de dólar literal. Esto también evita que Compose interpole un valor, por lo que un `$$` te permite hacer referencia a variables de entorno que no deseas que Compose procese.

```yml
web:
  build: .
  command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
```

Si Compose no puede resolver una variable sustituida y no se ha definido ningún valor predeterminado, muestra una advertencia y sustituye la variable por una cadena vacía.

Dado que cualquier valor de un archivo de Compose se puede interpolar mediante la sustitución de variables, incluida la notación de cadena compacta para elementos complejos, la interpolación se aplica antes de la fusión en cada archivo por separado.

La interpolación se aplica únicamente a los valores YAML, no a las claves. Para los pocos lugares donde las claves son en realidad cadenas arbitrarias definidas por el usuario, como [labels](/reference/compose-file/interpolation/services/#labels) o [environment](/reference/compose-file/interpolation/services/#environment), se debe utilizar una sintaxis alternativa con el signo igual para que se aplique la interpolación. Por ejemplo:

```yml
services:
  foo:
    labels:
      "$VAR_NOT_INTERPOLATED_BY_COMPOSE": "BAR"
```

```yml
services:
  foo:
    labels:
      - "$VAR_INTERPOLATED_BY_COMPOSE=BAR"
```

