Search code examples
dhall

Escaping string interpolation in Dhall's multi-line strings


For example, how would I escape the interpolation in the following string?

let foo =
      ''
      docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"
      docker build -f frontend/Dockerfile-prod \
        --build-arg OAUTH_GITHUB_CLIENT_ID=${OAUTH_GITHUB_CLIENT_ID-""} \
        --build-arg OAUTH_GITLAB_CLIENT_ID=${OAUTH_GITLAB_CLIENT_ID-""} \
        --build-arg OAUTH_GOOGLE_CLIENT_ID=${OAUTH_GOOGLE_CLIENT_ID-""}
      ''

in foo

With non-multiline strings putting \ in front of the interpolation works, e.g., replacing "Foo ${bar}" with "Foo \${bar}", but this doesn't seem to work with multi-line strings.

Thanks.


Solution

  • You can escape ${ within a multi-line string literal by prefacing it with '', like this:

    let foo =
          ''
          docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"
          docker build -f frontend/Dockerfile-prod \
            --build-arg OAUTH_GITHUB_CLIENT_ID=''${OAUTH_GITHUB_CLIENT_ID-""} \
            --build-arg OAUTH_GITLAB_CLIENT_ID=''${OAUTH_GITLAB_CLIENT_ID-""} \
            --build-arg OAUTH_GOOGLE_CLIENT_ID=''${OAUTH_GOOGLE_CLIENT_ID-""}
          ''
    
    in foo