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


398

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

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

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

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

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

1
두 번째 링크가 더 이상 작동하지 않습니다. 예를 들어 질문 해보십시오.
헤로인

답변:


565

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

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

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

최신 정보

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

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

16
그것은 전체 그림이 아닙니다. 예를 들어, @`는 예약 된 표시기 이므로 시작을 제외하고 일반 문자열의 어느 곳에서나 사용할 수 있습니다 .
Adam Spiers

19
나는 전체 그림을 제공하려고하지 않고 단지 몇 가지 규칙을 제시하려고했습니다. 예, 때로는 일부 특수 문자 (예약 된 표시기)를 따옴표없이 사용할 수 있지만 (예약 된 표시기가 일반 스칼라를 시작하지 않는 한) 특수 문자를 볼 때마다 따옴표를 사용하는 것은 잘못이 아닙니다.
Mark Berry

33
YAML의 문자열 규칙은 매우 다양한 유형의 문자열이 있기 때문에 엄청나게 복잡합니다. 나는 여기에 테이블을 작성 : stackoverflow.com/questions/3790454/...
스티브 베넷

56
이 모든주의 사항을 감안할 때, 나는 어디에서나 따옴표를 사용하고 싶습니다 :-/
Vicky Chijwani

6
또한 여기에 내가 쓴 완벽한 참조가 있습니다 : blogs.perl.org/users/tinita/2018/03/…
tinita

0

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

그게 다야.

이게 도움이 되길 바란다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.