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.