[syntax] YAML : YAML에서 문자열에 대한 따옴표가 필요합니까?

Rails 프로젝트의 국제화를 위해 YAML 사전을 작성하려고합니다. 일부 파일에서 큰 따옴표로 묶인 문자열과 그렇지 않은 문자열을 볼 때 약간 혼란 스럽습니다. 고려해야 할 몇 가지 사항 :

  • 예 1- 모든 문자열은 큰 따옴표를 사용합니다.
  • 예 2- 문자열 없음 (마지막 두 개 제외)은 따옴표를 사용합니다.
  • YAML 요리 책은 말한다 : 따옴표로 문자열을 묶는 것은 당신이 ASCII 및 유니 코드 문자를 표현하기 위해 escapings를 사용할 수 있습니다. 이것은 일부 문자를 이스케이프하려는 경우에만 큰 따옴표를 사용해야한다는 것을 의미합니까? 그렇다면-첫 번째 예에서 왜 어디서나 큰 따옴표를 사용합니까? 단일 / 문체를 위해서만?
  • 예제 2의 마지막 두 줄은 !비특이적 태그를 사용하지만 첫 번째 예제의 마지막 두 줄은 사용하지 않으며 둘 다 작동합니다.

제 질문은 YAML에서 다른 유형의 따옴표를 사용하는 규칙은 무엇입니까?

다음과 같이 말할 수 있습니다.

  • 일반적으로 따옴표가 필요하지 않습니다.
  • 문자를 이스케이프하려면 큰 따옴표를 사용하십시오.
  • !작은 따옴표와 함께 사용할 때 …?!?


답변

이 질문에 인용 된 YAML 요리 책과 몇 가지 테스트에 대한 간단한 검토를 한 후 다음과 같이 해석합니다.

  • 일반적으로 따옴표가 필요하지 않습니다.
  • 따옴표를 사용하여 문자열을 강제하십시오 (예 : 키 또는 값이 10있지만 Fixnum이 아닌 문자열을 리턴하려는 경우 쓰기 '10'또는) "10".
  • 당신의 값에 특수 문자가 포함 된 경우 따옴표를 사용하십시오 (예를 들어 :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, \).
  • 작은 따옴표를 사용하면 문자열에 거의 모든 문자를 넣을 수 있으며 이스케이프 코드를 구문 분석하지 않습니다. '\n'문자열로 반환됩니다 \n.
  • 큰 따옴표는 이스케이프 코드를 구문 분석합니다. "\n"줄 바꿈 문자로 반환됩니다.
  • 느낌표는 예 !ruby/sym를 들어 루비 기호를 반환하는 방법을 소개합니다 .

가장 좋은 방법은 반드시 인용 부호를 사용하지 않으면 따옴표를 사용하지 않고 탈출 코드를 구체적으로 처리하지 않으려는 경우 작은 따옴표를 사용하는 것입니다.

최신 정보

“Yes”와 “No”는 따옴표 (싱글 또는 더블)로 묶어야합니다. 그렇지 않으면 TrueClass 및 FalseClass 값으로 해석됩니다.

en:
  yesno:
    'yes': 'Yes'
    'no': 'No'


답변

DockerRails 애플리케이션을 작업 할 때 이러한 우려가있었습니다 .

가장 선호되는 방법은 일반적으로 따옴표를 사용 하지 않는 것입니다. 여기에는 따옴표를 사용 하지 않는 것이 포함됩니다 .

  • 같은 변수 ${RAILS_ENV}
  • 콜론 (:)으로 구분 된 값 postgres-log:/var/log/postgresql
  • 다른 문자열 값

그러나 integer다음과 같은 문자열로 변환 해야하는 값 에는 큰 따옴표를 사용하십시오 .

  • 도커 작성 버전 version: "3.8"
  • 같은 포트 번호 "8080:8080"

특별한 경우 원하는에 대한 그러나 booleans, floats, integers, 항목의 값을 큰 따옴표를 사용하고 다른 경우는,로 해석 될 수있다 strings, 제발 하지 따옴표를 사용합니다.

docker-compose.yml이 개념을 설명 하는 샘플 파일 은 다음과 같습니다 .

version: "3"

services:
  traefik:
    image: traefik:v2.2.1
    command:
      - --api.insecure=true # Don't do that in production
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

그게 다야.

이게 도움이 되길 바란다


답변