YAML: Czy potrzebuję cudzysłowów dla ciągów w YAML?
Próbuję napisać słownik YAML dla internacjonalizacji projektu Rails. Jestem trochę zdezorientowany, ponieważ w niektórych plikach widzę ciągi w podwójnych cudzysłowach, a w niektórych bez. Kilka punktów do rozważenia:
- przykład 1 - wszystkie łańcuchy znaków używają podwójnych cudzysłowów;
- przykład 2 - żadne łańcuchy (poza dwoma ostatnimi) nie używają cudzysłowów;
- YAML cookbook mówi: zamykanie łańcuchów w podwójnych cudzysłowach pozwala na użycie znaków specjalnych do reprezentowania znaków ASCII i Unicode. czy to oznacza, że muszę używać podwójnych cudzysłowów tylko wtedy, gdy chcę uciec od niektórych znaków? Jeśli tak-to dlaczego w pierwszym przykładzie wszędzie używają podwójnych cudzysłowów-tylko ze względu na jedność / powody stylistyczne?
- dwie ostatnie linie przykładu 2 używają
!
- niespecyficznego znacznika, podczas gdy dwie ostatnie linie pierwszego przykładu nie-i obie działają.
Moje pytanie brzmi: Jakie są zasady korzystania z różnych typów cytatów w YAML?
Można powiedzieć, że:
- ogólnie rzecz biorąc, nie potrzebujesz cudzysłowów;
- jeśli chcesz uniknąć znaków użyj podwójnych cudzysłowów;
- użyj
!
z pojedynczymi cudzysłowami, gdy... ?!?
2 answers
Po krótkim przeglądzie cytowanej w pytaniu książki kucharskiej YAML i kilku testach, oto moja interpretacja:]}
- ogólnie rzecz biorąc, nie potrzebujesz cudzysłowów.
- użyj cudzysłowów, aby wymusić łańcuch, np. jeśli twoim kluczem lub wartością jest
10
, ale chcesz, aby zwrócił łańcuch, a nie Fixnum, napisz'10'
lub"10"
. - użyj cudzysłowów, jeśli wartość zawiera znaki specjalne, (np.
:
,{
,}
,[
,]
,,
,&
,*
,#
,?
,|
,-
,<
,>
,=
,!
,%
,@
,\
). - pojedyncze cudzysłowy pozwalają umieścić prawie każdy znak w łańcuchu i nie będą próbowały analizować kodów ucieczki.
'\n'
zostanie zwrócony jako łańcuch\n
. - double quotes parse Escape codes.
"\n"
zostanie zwrócony jako znak kanału linii. - wykrzyknik wprowadza metodę, np.
!ruby/sym
zwracającą symbol Ruby.
Wydaje mi się, że najlepszym podejściem byłoby nie używać cudzysłowów, chyba że trzeba, a następnie używać pojedynczych cudzysłowów, chyba że chcesz przetwarzać kody specjalne.
Update
W przeciwnym razie zostaną one zinterpretowane jako wartości TrueClass i FalseClass:"Yes" I "No" powinny być zawarte w cudzysłowach (pojedyncze lub podwójne).]}
en:
yesno:
'yes': 'Yes'
'no': 'No'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-10 17:56:18
Miałem ten problem podczas pracy nad rails aplikacją z Docker.
Moim najbardziej preferowanym podejściem jest ogólnie , a nie używanie cudzysłowów. Obejmuje to Nie używanie cudzysłowów dla:
- zmienne jak
${RAILS_ENV}
- wartości oddzielone dwukropkiem (:) jak
postgres-log:/var/log/postgresql
- inne wartości ciągów
Używam jednak cudzysłowów dla integer
wartości, które muszą być przekonwertowane na ciągi znaków like:
- docker-skomponuj wersję jak
version: "3.8"
- liczby portów jak
"8080:8080"
Jednak w szczególnych przypadkach, takich jak booleans
, floats
, integers
, i inne przypadki, w których używanie podwójnych cudzysłowów dla wartości wejściowych może być interpretowane jako strings
, proszę zrobić , a nie używać podwójnych cudzysłowów.
Oto przykładowy plik docker-compose.yml
, aby wyjaśnić tę koncepcję:
version: "3"
services:
traefik:
image: traefik:v2.2.1
command:
- --api.insecure=true # Don't do that in production
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
To wszystko.
Mam nadzieję, że to pomoże
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-17 08:30:17