YAML에서 인디케이터 문자 (예 : 또는-)를 이스케이프 처리하는 방법


241

구성 파일에는 URL을 할당하려는 키가 있습니다. 문제는 YAML이 : 및-문자를 매핑 또는 목록을 생성하는 것으로 해석하므로 행에 문제가 있다는 것입니다

url: http://www.example-site.com/

(둘 다 http 뒤에 콜론과 중간에 하이픈이 있기 때문에)

':'및 '-'를 이스케이프하는 명시적인 방법이 있습니까? 아니면 모든 것을 작은 따옴표로 묶고 하루라고 부르는 것이 효과가 있습니까?


답변:


232

인용 부호:

"url: http://www.example-site.com/"

명확히하기 위해, 나는“값을 인용하다”라는 의미로 원래 전체가 가치라고 생각했다. 경우 http://www.example-site.com/값, 그냥 그렇게 좋아 인용 :

url: "http://www.example-site.com/"

30
파서에 따라 달라집니다. Jekyll YAML에서는 작동하지 않았습니다.
ptomato

1
YAMLDotNet은 또한 따옴표를 렌더링합니다.
Dr1Ku

더 나은 거 없어? 따옴표 자체를 이스케이프해야하기 때문에 문제가 해결되지 않고 단순히 앞으로 나아갑니다.
Augustin Riedinger

2
글쎄, 마크 다운과 같은 오류 방지 문서를 갖는 것이 훨씬 더 시원 할 것이므로, 팀의 기술이 아닌 사람들은 문서를 깰 위험없이 편집 할 수 있습니다 (예 : Rails의 로케일 파일)!
Augustin Riedinger

1
@ivan_pozdeev : 따옴표는 전체 문자열을 둘러 쌉니다. - 'PS4="+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }"'
Ry-

182

길고 여러 줄로 된 텍스트의 경우에도 효과가 있고 더 좋은 점은 파이프 나 그 이후의 기호 다음에 텍스트를 다음 줄에 들여 쓰기하는 것입니다.

text: >
    Op dit plein stond het hoofdkantoor van de NIROM: Nederlands Indische 
    Radio Omroep

파이프는 개행을 유지하고 gt-sign은 다음의 모든 행을 하나의 긴 문자열로 바꿉니다.


6
... 그리고 줄 바꿈이 끝에 추가됩니다. 보통 원하는 것이 아닙니다.
equaeghe

51
@equaeghe : >-또는 |-이를 방지하기 위해 또는 사용할 수 있습니다 .
dtoux

4
이것은 훌륭한 솔루션입니다. 텍스트에서 다른 문자를 이스케이프하지 않아도됩니다. +++ 90000 포인트
bennlich 2016 년

어떻게 든 여러 줄로 된 목록을 가질 수 있습니까? 시도 - >했지만 첫 번째 항목 이후의 항목은 무시됩니다.
ffghfgh

3
@ffghfgh-어그! 주석에서 코드의 형식을 올바르게 지정하는 방법을 알 수 없어서 원래 주석을 편집 할 수 없습니다. 기본적으로 파이프와 함께 목록 항목을 - |다음과 같이 사용했습니다. 그런 다음 새 줄에서 첫 번째 문자가 파이프와 정렬되도록 목록 항목 텍스트를 들여 쓰기했습니다. Rails 4.2 로케일 파일에서 도움이되기를 바랍니다.
Spakman

51

YAML 사양에 따르면, 그 어느 것도 문제가 :되지 않습니다 -. :뒤에 공백이있는 키 분리 자일뿐입니다.- 이있는 행의 시작 부분에 배열 표시 기일뿐입니다.

그러나 YAML 구현에 문제가 있으면 많은 옵션이 있습니다.

- url: 'http://www.example-site.com/'
- url: "http://www.example-site.com/"
- url:
    http://www.example-site.com/
- url: >-
    http://www.example-site.com/
- url: |-
    http://www.example-site.com/

그러나 " 평범한 스타일 "에서는 가능한 이스케이프 형식이 없습니다 .


1
travisCI의 린 터는 비정상적으로 콜론에 대해 불평합니다 -lint.travis-ci.org
koppor

Travis CI의 경우 작은 따옴표 안에 콜론이 있으면 괜찮습니다.
Malvineous

30

따옴표,하지만 나는 단지 가치에 그들을 선호합니다 :

url: "http://www.example.com/"

전체 라인에 배치하면 문제가 발생할 수 있습니다.


21

Jekyll에서 사용되는 YAML 파서와 함께 작동하는 또 다른 방법 :

title: My Life: A Memoir

반면에 공백이없는 콜론은 Jekyll의 YAML 파서를 방해하지 않는 것 같습니다. 대시도하지 않습니다.


… 문자 엔터티는 YAML의 일부입니까? 그리고 Jekyll은 실제로 YAML을 사용합니까?
Ry-

Jekyll은 그것을 사용한다고 주장합니다 : jekyllrb.com/docs/frontmatter YAML 사양에서 문자 엔터티에 대해 아무것도 찾을 수 없으므로 Jekyll이 이상하다고 생각하지만이 답변은 Googling "yaml escape colon"과 같은 사람들에게 적합합니다. me ;-)
ptomato

4

당신이 사용하는 경우 @ConfigurationProperties나머지 부분을 제거, 문자 '-'다음 콜론을 포함 봄 영숫자 허용하고 있기 때문에 당신이 따옴표 안에 대괄호를 사용하여 탈출의 추가 수준을 필요로 키 맵을 주입하는 봄 부팅 2. 새 키는 다음과 같습니다.

"[8.11.32.120:8000]": GoogleMapsKeyforThisDomain

참조 참조 용 github의 문제.


이것은 현재 사용 사례에서 가장 도움이됩니다. 감사합니다
anand

2

Azure DevOps 명령 줄 작업을 수행하려고 노력했습니다. 나를 위해 일한 것은 파이프 ( |) 문자를 사용하는 것이 었습니다 . 사용 >하지 못했습니다.

예:

steps:
- task: CmdLine@2
  inputs:
    script: |
      echo "Selecting Mono version..."
      /bin/bash -c "sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_18_1"
      echo "Selecting Xcode version..."
      /bin/bash -c "echo '##vso[task.setvariable variable=MD_APPLE_SDK_ROOT;]'/Applications/Xcode_10.2.1.app;sudo xcode-select --switch /Applications/Xcode_10.2.1.app/Contents/Developer"

에서 같은 것을 사용 .gitlab-ci.yml했지만 파이프 '|'가 필요할 때까지 스크립트에서-그것은 자동으로 실패합니다 :(
Dalibor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.