YAML'de gösterge karakterlerinden (yani: veya -) kaçma


241

Bir yapılandırma dosyasında, URL atamak istediğim bir anahtarım var. Sorun, YAML'nin: ve - karakterlerini eşleme veya liste oluşturma olarak yorumlamasıdır, bu nedenle satırla ilgili bir sorunu vardır

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

(http'yi takip eden iki nokta ve ortadaki kısa çizgi nedeniyle)

':' Ve '-' 'dan kaçmanın açık bir yolu var mı? Yoksa her şeyi tek tırnak içine alıp bir gün olarak adlandırmak işe yarar mı?


Yanıtlar:


232

Alıntılar:

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

Açıklığa kavuşturmak için “değeri teklif et” demek istedim ve aslında her şeyin değer olduğunu düşündüm. Değer http://www.example-site.com/ise, sadece böyle teklif edin:

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

30
Görünüşe göre ayrıştırıcıya bağlıdır. Bu Jekyll YAML ile çalışmadı.
ptomato

1
YAMLDotNet de alıntı yapar.
Dr1Ku

Daha iyi bir şey yok mu? Çünkü o zaman tırnaklar kendilerinden kaçmalı, bu da sorunu çözmez, ancak sadece ileriye doğru hareket eder ...
Augustin Riedinger

2
Hatalı bir belgeye sahip olmak, tıpkı işaretleme gibi, çok daha havalı olurdu, bu yüzden ekibin teknoloji dışı adamları onu bozma riski olmadan onu düzenleyebilirler (örneğin, Rails'deki yerel dosyalar)!
Augustin Riedinger

1
@ivan_pozdeev: Alıntılar tüm dizenin etrafından geçer. - 'PS4="+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }"'
Ry-

182

Uzun, çok satırlı metinler için de işe yarar ve daha da güzel olan şey, metninizi bir satırdan veya daha büyük bir işaretten sonra bir sonraki satıra girintili yapmaktır:

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

Bir boru yeni satırları korur, gt işareti aşağıdaki tüm satırları uzun bir dizeye dönüştürür.


6
... ve sonunda bir satırsonu eklenir, bu genellikle istediğiniz şey değildir.
equaeghe

51
@equaeghe: Bunu önlemek için >-veya öğesini kullanabilirsiniz |-.
Mart'ta dtoux

4
Bu harika bir çözüm. Metninizdeki diğer karakterlerden kaçmak zorunda kalmaz. +++ 90000 puan
bennlich

bir şekilde çok satırlı bir listeye sahip olmak mümkün mü? Denedim - >ama ilk sonra öğeler göz ardı edilir.
ffghfgh

3
@ffghfgh - urg! Yorumda kodu düzgün biçimlendirmek nasıl anlayamıyorum ve şimdi orijinal yorumu düzenleyemiyorum. Temel olarak, böyle bir boru ile bir liste öğesi kullandım: - |ve sonra yeni bir satırda liste öğesi metnini girintiledim, böylece ilk karakter boru ile dizildi. Umarım bu yardımcı olur, benim için bir Rails 4.2 yerel dosyada çalıştı.
Spakman

51

YAML spesifikasyonuna göre, ne sorun :ne de -sorun olmamalıdır. :yalnızca arkasından boşluk olan bir anahtar ayırıcıdır ve -yalnızca boşluktan sonraki bir satırın başlangıcında bir dizi göstergesidir.

Ancak YAML uygulamanızın bir sorunu varsa, potansiyel olarak birçok seçeneğiniz vardır:

- 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/

Bununla birlikte, " sade tarzda " açıkça kaçış şekli yoktur .


1
TravisCI'nin Linter'i Olağandışı Kolonlar Hakkında Şikayet Ediyor
lint.travis-ci.org

Travis CI için, tek tırnak içindeki iki nokta üst üste işaretlerinin iyi olduğu anlaşılıyor.
Malvineous

30

Tırnak, ama ben sadece değer onları tercih:

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

Onları tüm çizgiye yerleştirmek sorunlara neden olabilir.


21

Jekyll'de kullanılan YAML ayrıştırıcısı ile çalışan başka bir yol:

title: My Life: A Memoir

Öte yandan boşlukların takip etmediği sütunlar, Jekyll'in YAML ayrıştırıcısını rahatsız etmiyor gibi görünüyor. Aynı zamanda tire işareti kullanmayın.


… Karakter varlıkları YAML'ın bir parçası mı? Ve Jekyll aslında YAML ne kullanıyor?
Ry-

Jekyll kullanmak iddia: jekyllrb.com/docs/frontmatter YAML spec karakter varlıkları hakkında bir şey bulamıyorum, bu yüzden Jekyll anormal olduğundan şüpheleniyorum, ama bu cevap insanlar için iyi hizmet düşünüyorum "yaml kaçış kolon" gibi beni ;-)
ptomato

4

@ConfigurationPropertiesİki nokta üst üste içeren tuşlarla harita enjekte etmek için Spring Boot 2 ile birlikte kullanıyorsanız , bahar tırnakların içindeki köşeli parantezleri kullanarak ek bir kaçış düzeyine ihtiyacınız vardır, çünkü bahar sadece alfasayısal ve '-' karakterlere izin verir, gerisini sıyırır. Yeni anahtarınız şöyle görünecektir:

"[8.11.32.120:8000]": GoogleMapsKeyforThisDomain

Başvuru için bu github sorununa bakın .


Bu benim mevcut kullanım durumumda en yararlı olanıdır. Teşekkürler
anand

2

Buraya Azure DevOps Komut Satırı görevimin çalışmasını sağlamaya çalıştım. Benim için işe yarayan şey, pipe ( |) karakterini kullanmaktı. Kullanmak >işe yaramadı.

Misal:

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"

Ben de aynı şeyi kullandım .gitlab-ci.yml, ama '|' komut dosyasında - sessizce başarısız :(
Dalibor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.