ฉันจะหลบหนีเครื่องหมายดอลลาร์ในไฟล์นักเทียบท่าได้อย่างไร


97

ฉันมีสเกลาร์ YAML ที่ทำให้เกิดข้อผิดพลาดต่อไปนี้เมื่อฉันพยายามประเมินdocker-compose.ymlไฟล์ของฉัน:

ข้อผิดพลาด: รูปแบบการแก้ไขไม่ถูกต้องสำหรับตัวเลือก "สภาพแวดล้อม" ในบริการ "time_service": "$ {Time.now}"

YAML:

---
version: '2'
services:
  time_service:
    build: "."
    environment:
      TIME: "${Time.now}"

ฉันจะรักษาเอาท์พุทสตริงเดียวกันตามที่เขียนไว้ได้อย่างไร แต่หลีกเลี่ยงไม่ให้นักเทียบท่าเขียนตีความว่าเป็นการแก้ไขสตริงที่ผิดพลาด


1
ไม่ใช่ตัวแยกวิเคราะห์ YAML ที่ตีความสตริงนั้น YAML ${}ไม่ทราบเกี่ยวกับ การตีความทำได้โดยdocker-composeและเขียนด้วย Python ดังนั้นแท็ก Ruby จึงไม่เหมาะสมเช่นกัน
Anthon

ฉันลบสมมติฐานที่ไม่ถูกต้องว่านี่คือปัญหา YAML ทำให้คนอื่นเข้าใจผิดและเสียเวลา
ทอน

คำตอบ:


142

คุณสามารถใช้$$(เครื่องหมายสองดอลลาร์) เมื่อการกำหนดค่าของคุณต้องการเครื่องหมายดอลลาร์ตามตัวอักษร

คุณกำลังกดปุ่มย่อยdocker-composeตัวแปรซึ่งมีการบันทึกไว้อย่างดีที่นี่ :

รองรับทั้งสอง$VARIABLEและ${VARIABLE}ไวยากรณ์ ไม่รองรับฟีเจอร์สไตล์เชลล์แบบขยายเช่น${VARIABLE-default}และ${VARIABLE/foo/bar}

คุณสามารถใช้$$(เครื่องหมายสองดอลลาร์) เมื่อการกำหนดค่าของคุณต้องการเครื่องหมายดอลลาร์ตามตัวอักษร นอกจากนี้ยังป้องกันไม่ให้ Compose แก้ไขค่าด้วยดังนั้น a $$ช่วยให้คุณอ้างถึงตัวแปรสภาพแวดล้อมที่คุณไม่ต้องการให้ประมวลผลโดย Compose

docker-composeเขียนด้วย Python อย่างที่คุณเห็นในgithubกลไกการเพิ่มเป็นสองเท่าเพื่อให้ได้ความหมายดั้งเดิมของอักขระพิเศษสามารถพบได้ในหลาย ๆ โปรแกรมฉันต้องใช้สิ่งนี้ด้วยตัวเองในขณะที่เขียนโปรแกรมย้อนกลับไปในปี 1984


38

พบคำตอบโดยการคัดลอกคำแนะนำสำหรับ%ตัวละครในโพสต์นี้

$$มันต้องมีเครื่องหมายดอลลาร์คู่

ดังนั้นฉันจึงต้องการ"$${Time.now}"ซึ่งประเมินเป็น"${Time.now}"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.