Single vs Double Quote ใน YAML แตกต่างกันไหม

ค่าใน YAML แบบไม่มี quote, double quote และ single quote มีผลอย่างใรบ้าง

author image
drs

Technology evangelistic advocacy

Posted on 2023-12-07 00:51:47 +0700

เกริ่นเรื่อง YAML นิดหน่อย

เวลาที่เราเขียน YAML ไฟล์ นั่งคือเราตั้งในส่งข้อมูลในรูปแบบของ key & value ไปยังคนอื่นที่ต้องการข้อมูลจากเรา โดยที่ key กับ value จะคั่นด้วย ": " (colon space) หน้าตาก็จะเป็นแบบนี้ key: value ซึ่งค่าของ value จำเป็น word, number หรือ string ได้หมดไม่ติดอะไร

ฉุกคิด

ถ้าโลกเรียบง่ายอย่างนี้คงไม่มีอะไร เพราะว่าจากตัวอย่างค่าของ motto จะเป็นค่าที่เหมือนกันหมดคือประโยคที่ว่า The way we win matter


---
   motto: The way we win matter
   motto: "The way we win matter"
   motto: 'The way we win matter'
...

แล้วถ้าประโยคของเราเป็นแบบนี้ล่ะ จะเกิดอะไรขึ้นประโยคที่เราจะใส่ไปในค่าใน YAML เป็นแบบนี้
What is the meaning of \t in the context of escape characters?


---
  question: What is the meaning of \t in the context of escape characters?
  question: "What is the meaning of \t in the context of escape characters?"
  question: 'What is the meaning of \t in the context of escape characters?'
...

หาคำตอบ

ผมเลือกใช้ Kubernetes เป็นเครื่องมือในการทดสอบ ผมทดลองเอาประโยคทั้ง 3 รูปแบบไปใส่ไว้ใน ConfigMaps ชื่อข้อมูลว่า none, single, double จากนั้นผมก็จะนำเอา ข้อมูลใน ConfigMaps เหล่านั้นไปเขียนไว้ในไฟล์ใน ​Pods


 > cat cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
data:
  none: What is the meaning of \t in the context of escape characters?
  double: "What is the meaning of \t in the context of escape characters?"
  single: 'What is the meaning of \t in the context of escape characters?'
> cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: yaml-test
spec:
  containers:
    - name: mycon
      image: nginx
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: myconfig

> kubectl apply -f cm.yaml -f pod.yaml
configmap/myconfig created
pod/yaml-test created

> kubectl exec -it yaml-test -- sh
# cat /etc/config/none
What is the meaning of \t in the context of escape characters?
# cat /etc/config/single
What is the meaning of \t in the context of escape characters?
# cat /etc/config/double
What is the meaning of   in the context of escape characters?
ผลลัพธ์ที่ได้จะเห็นได้ว่าประโยคที่ไม่มี quote และ ประโยคที่ใช้ Single Quote จะได้ผลเหมือนกัน คือ escape character จะไม่ถูกตีความ แต่ว่า ประโยคที่ใช้ Double Quote ที่ตัวอักษร \t จะกลายเป็นช่องว่าที่เกิดจาก tab แทน นั่นหมายความว่า escape character ถูกตีความให้กลายเป็น tab

cover

Share on

Tags

Human knowledge belongs to the world

a line from the movie "Antitrust"