Ansible Jinja2 в vars.yml group_vars [дубликат]

Чтобы остановить Media Player без риска исключения из-за незаконного состояния, вы должны сделать

  try {
        mp.reset();
        mp.prepare();
        mp.stop();
        mp.release();
        mp=null;
       }
  catch (Exception e)
         {
           e.printStackTrace();
         }

, а не только

try {
       mp.stop();
       mp.release();
       mp=null;
    } 
catch (Exception e) 
    {
      e.printStackTrace();
    }
1007
задан dreftymac 31 May 2017 в 08:48
поделиться

8 ответов

Используя стиль yaml folded, каждый разрыв строки заменяется пробелом. Отступ в каждой строке будет проигнорирован.

>
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  without carriage returns.

http://symfony.com/doc/current/components/yaml/yaml_format.html

546
ответ дан lleaff 15 August 2018 в 15:32
поделиться
  • 1
    Спасибо, но вы не можете обернуть этот синтаксис в кавычки, кажется: кавычки появляются как литералы в результирующей строке. – jjkparker 27 September 2010 в 17:55
  • 2
    Я не думаю, что вы добавляете цитаты. > указывает, что это строка. – Matt Williamson 28 September 2010 в 05:31
  • 3
    Как-то возврат каретки добавляется сразу после окончания перевода в моем приложении. Таким образом, Javascript видит это как несколько строк и терпит неудачу. {{- 'key'|trans -}} тоже не работает. – Rvanlaak 6 May 2015 в 14:48
  • 4
    Как вы получите такой же эффект, как и значение в списке? – Mikhail 2 June 2015 в 02:17
  • 5
    Этот ответ в порядке, но ответ Мэтта Уильямсона ниже должен быть принят. – Travis Bear 30 September 2016 в 18:41

Для сохранения новых строк используйте |, например:

|
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  with newlines preserved.

переводится на «Это очень длинное предложение\n, которое охватывает несколько строк в YAML\n, но будет отображаться как строка\n с сохраненными символами новой строки. "

149
ответ дан Ali Shakiba 15 August 2018 в 15:32
поделиться
  • 1
    Кажется, это работает отлично для меня с двумя линиями, но не с тремя? – cboettig 23 October 2013 в 23:09
  • 2
    @cboettig Попробуйте здесь: nodeca.github.io/js-yaml – Ali Shakiba 24 October 2013 в 20:12
  • 3
    Спасибо, прекрасно работает там, как вы говорите. По какой-то причине в заголовках ямлов Pandoc мне нужно повторить | в каждой строке по причинам, которые для меня не очевидны: groups.google.com/forum / #! Topic / pandoc-discuss / xuqEmhWgf9A – cboettig 24 October 2013 в 20:48
  • 4
    Этот пример НЕ преобразуется в новые строки в рельсах 4! – Rubytastic 13 November 2013 в 18:03
  • 5
    Не проблема, что если я напишу: - field1: | один два - поле1: | три для «Я получаю: один\ntwo\n и три\nfor? Я бы аспект\n после 2, чтобы не быть там ... – Alain1405 14 January 2014 в 18:52

1. Блок-обозначения: новые строки становятся пробелами и дополнительными символами новой строки после удаления блока

---
# Note: it has 1 new line after the string
content:
    Arbitrary free text
    over multiple lines stopping
    after indentation changes...

...

Эквивалентный JSON

{
 "content": "Arbitrary free text over multiple lines stopping after indentation changes..."
}

2. Литературный блок Скаляр: скалярный блок | будут включать в себя новые строки и любые конечные пробелы. но удаляет дополнительные

строки новой строки после блока.

---
# After string we have 2 spaces and 2 new lines
content1: |
 Arbitrary free text
 over "multiple lines" stopping
 after indentation changes...  


...

Эквивалентный JSON

{
 "content1": "Arbitrary free text\nover \"multiple lines\" stopping\nafter indentation changes...  \n"
}

3. + с литеральным блочным скаляром: сохранить дополнительные строки после блока

---
# After string we have 2 new lines
plain: |+
 This unquoted scalar
 spans many lines.


...

Эквивалентный JSON

{
 "plain": "This unquoted scalar\nspans many lines.\n\n\n"
}

4. - индикатор с Literal Block Scalar: - означает, что строка новой строки в конце строки удалена.

---
# After string we have 2 new lines
plain: |-
 This unquoted scalar
 spans many lines.


...

Эквивалентный JSON

{
 "plain": "This unquoted scalar\nspans many lines."
}

5.

---
folded_newlines: >
 this is really a
 single line of text
 despite appearances


...

Эквивалентный JSON

{
 "fold_newlines": "this is really a single line of text despite appearances\n"
}

:

будет складывать новые строки в пробелы, но удаляет дополнительные строки новой строки. более подробно вы можете посетить мой блог

33
ответ дан Arayan Singh 15 August 2018 в 15:32
поделиться
  • 1
    Вы использовали, например, # 4 для использования & quot; | - & quot; после толстой кишки? Кроме того, вы можете потерять & quot; --- & quot; Здесь указывается конечный маркер, поскольку вы показываете только один документ. Маркеры конца документа полезны для выделения конечных пробелов в документах. Кроме того, нет необходимости в явных документах. – seh 6 April 2018 в 13:43
  • 2
    спасибо за указание. это была опечатка. А это исправило. Я предоставил начальный и конечный маркер, чтобы каждый мог видеть новые строки после строки. – Arayan Singh 6 April 2018 в 14:17

В ситуациях, когда строка могла содержать пробелы или нет, я предпочитаю двойные кавычки и продолжение строки с помощью обратных косых черт:

key: "String \
  with long c\
  ontent"

Но обратите внимание на ловушку для случая, когда линия продолжения начинается с пробела , он должен быть экранирован (потому что он будет удален в другом месте):

key: "String\
  \ with lon\
  g content"

Если строка содержит разрывы строк, это должно быть записано в стиле C \n.

См. также этот вопрос .

5
ответ дан Joe 15 August 2018 в 15:32
поделиться

Возможно, вы не поверите, но YAML также может использовать многострочные клавиши:

?
 >
 multi
 line
 key
:
  value
34
ответ дан Mohsen 15 August 2018 в 15:32
поделиться
  • 1
    Требуется пояснение (что такое & quot; & quot;). – ilyaigpetrov 26 September 2017 в 11:38
  • 2
    @ilyaigpetrov точно так же, как написано, "многострочный" ключ. Обычно вы делаете такие вещи, как key:value, но если ваш ключ содержит новую строку, вы можете сделать это, как описано выше – goFrendiAsgard 9 October 2017 в 01:33
  • 3
    Любой пример реального использования для этого? – Richard-Degenne 11 December 2017 в 15:49

Чтобы конкатенировать длинные строки без пробелов , используйте двойные кавычки и избегайте строк новой строки с обратными косыми чертами:

key: "Loremipsumdolorsitamet,consecteturadipiscingelit,seddoeiusmodtemp\
  orincididuntutlaboreetdoloremagnaaliqua."

(Спасибо @Tobia)

22
ответ дан phs 15 August 2018 в 15:32
поделиться
  • 1
    Спасибо, это действительно помогло мне определить объемы докеров в нескольких строках! Если у кого-то такая же проблема, здесь мое решение на онлайн-партере YAML – Mike Mitterer 3 August 2017 в 10:05
  • 2
    Отлично, отлично работает с Ansible. – gertas 31 August 2017 в 09:58
  • 3
    Ах, наконец. Я пытался обернуть длинные ssh-ключи в Yaml-файлах Puppet на нескольких строках, но всегда получал нежелательные пробелы, пока не использовал ваш ответ. Благодарю. – Martijn Heemels 30 November 2017 в 10:53

Если вы используете yml и Twig для переводов в Symfony и хотите использовать многострочные переводы в Javascript, возврат каретки добавляется сразу после перевода. Таким образом, даже следующий код:

var javascriptVariable = "{{- 'key'|trans -}}";

Который имеет следующий перевод yml:

key: >
    This is a
    multi line 
    translation.

По-прежнему будет выглядеть следующий код в html:

var javascriptVariable = "This is a multi line translation.
";

Итак, знак минус в Twig не решает этого. Решение состоит в том, чтобы добавить этот знак минуса после знака в yml:

key: >-
    This is a
    multi line 
    translation.

Будет иметь правильный результат, многострочный перевод на одной строке в Twig:

var javascriptVariable = "This is a multi line translation.";
15
ответ дан Rvanlaak 15 August 2018 в 15:32
поделиться
  • 1
    Это похоже на ошибку. У вас есть шанс подать отчет об ошибке? – dreftymac 20 January 2016 в 05:45

Есть 5 6 NINE (или 63 *, в зависимости от того, как вы рассчитываете) разные способы записи многострочных строк в YAML.

Блокировать скалярные стили (>, |)

Они позволяют использовать символы, такие как \ и " без экранирования, и добавить новую строку (\n) в конец строки

> Сложенный стиль удаляет одиночные строки новой строки внутри строки (но добавляет один в конец и преобразует двойные строки в синглы):

Key: >
  this is my very very very
  long string

this is my very very very long string\n

| Литеральный стиль превращает каждую новую строку внутри строки в литеральную новую строку, и добавляет один в конец:

Key: |
  this is my very very very 
  long string

this is my very very very\nlong string\n

Вот официальное определение из YAML Spec 1.2

Скалярное содержимое может быть записано в блок-нотации, используя литеральный стиль (обозначается символом «|»), где все разрывы строк значительны. В качестве альтернативы, они могут быть записаны со сложенным стилем (обозначается символом «>»), где каждый разрыв строки складывается в пространство, если только он не заканчивается пустой или более с отступом.

Блок >-, |+)

Вы можете управлять обработкой последней новой строки в строке и любыми простыми пустыми строками (\n\n), добавив символ индикатора блокировки блока :

  • >, |: «clip»: сохранить линию, удалить завершающие пустые строки .
  • >-, |-: «strip»: удалить линию, удалить завершающие пустые строки.
  • >+, |+: «сохранить»:

Скалярные стили «Поток» (, ", ')

Они имеют ограниченное экранирование , и постройте однострочную строку без новых символов строки.

простой стиль (без экранирования, нет # или :, ограничения на первый символ):

Key: this is my very very very 
  long string

стиль с двойными кавычками (\ и " должен быть экранирован \, строки новой строки могут быть вставлены с буквальной последовательностью \n, строки могут быть объединены без пробелов с конечным \):

Key: "this is my very very \"very\" loooo\
  ng string.\n\nLove, YAML."

& rarr; "this is my very very \"very\" loooong string.\n\nLove, YAML."

стиль с одним кадром (буквальный ' должен быть удвоен, никаких специальных символов, возможно полезно для выражения строк, начинающихся с двойных кавычек ):

Key: 'this is my very very "very"
  long string, isn''t it.'

& rarr; "this is my very very \"very\" long string, isn't it."

Резюме

В этой таблице _ означает space character. \n означает «символ новой строки» (\n в JavaScript), за исключением строки «строки строки», где это означает буквально обратную косую черту и n).

                      >     |            "     '     >-     >+     |-     |+
-------------------------|------|-----|-----|-----|------|------|------|------  
Trailing spaces   | Kept | Kept |     |     |     | Kept | Kept | Kept | Kept
Single newline => | _    | \n   | _   | _   | _   | _    |  _   | \n   | \n
Double newline => | \n   | \n\n | \n  | \n  | \n  | \n   |  \n  | \n\n | \n\n
Final newline  => | \n   | \n   |     |     |     |      |  \n  |      | \n
Final dbl nl's => |      |      |     |     |     |      | Kept |      | Kept  
In-line newlines  | No   | No   | No  | \n  | No  | No   | No   | No   | No
Spaceless newlines| No   | No   | No  | \   | No  | No   | No   | No   | No 
Single quote      | '    | '    | '   | '   | ''  | '    | '    | '    | '
Double quote      | "    | "    | "   | \"  | "   | "    | "    | "    | "
Backslash         | \    | \    | \   | \\  | \   | \    | \    | \    | \
" #", ": "        | Ok   | Ok   | No  | Ok  | Ok  | Ok   | Ok   | Ok   | Ok
Can start on same | No   | No   | Yes | Yes | Yes | No   | No   | No   | No
line as key       |

Примеры

Обратите внимание на конечные пробелы в строке перед «пробелами».

- >
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- | 
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- "very \"long\"
  'string' with

  paragraph gap, \n and        
  s\
  p\
  a\
  c\
  e\
  s."
- 'very "long"
  ''string'' with

  paragraph gap, \n and        
  spaces.'
- >- 
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.

[
  "very \"long\" 'string' with\nparagraph gap, \\n and         spaces.\n", 
  "very \"long\"\n'string' with\n\nparagraph gap, \\n and        \nspaces.\n", 
  "very \"long\" 'string' with\nparagraph gap, \\n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \\n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \\n and         spaces."
]

Стили блоков с индикаторами отступа

На всякий случай выше для вас недостаточно, вы можете добавить «индикатор отступа блока » (после индикатора блокировки блока, если он у вас есть):

- >8
        My long string
        starts over here
- |+1
 This one
 starts here

Добавление

Если вы вставляете лишние пробелы в начале не-первых строк в стиле Folded, они будут сохранены с бонусной новой линией. Это не происходит с стилями потока:

- >
    my long
      string
- my long
    string

["my long\n string\n", "my long string"]

Я даже не могу.

* 2 (или нет) и с 9 возможными индикаторами отступов (или none), 1 простой стиль и 2 кавычки: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63

Часть этой информации также была обобщена здесь .

2269
ответ дан Steve Bennett 15 August 2018 в 15:32
поделиться
  • 1
    Среди 63 синтаксисов, как вы думаете, есть один, который позволяет вам называть несколько строк строкой, которая не должна иметь новые строки или пробелы? Я имею в виду то, что пишут как "..." + "..." в большинстве языков программирования, или обратную косую черту перед новой строкой в ​​Bash. – Tobia 28 July 2016 в 15:33
  • 2
    @pepoluan Я пробовал каждую возможную комбинацию и нашел только одну, которая позволяет без пробелов конкатенации: поместить двойные кавычки вокруг строки и обратную косую черту перед новой строкой (и отступом). Пример: data: text / plain; base64, dGVzdDogImZvb1wKICBiYXIiCg == – Tobia 26 August 2016 в 08:56
  • 3
    Ах, спасибо - что (trailing backslash = & gt; no space) - это поведение, которое я пропустил. Кажется, он уникален для двойных кавычек. – Steve Bennett 26 August 2016 в 09:11
  • 4
    @wvxvw, наоборот, я думаю, что YAML является наихудшим форматом для многих распространенных случаев использования (например, конфигурационных файлов), не в последнюю очередь потому, что большинство людей привлекает своей очевидной простотой только для того, чтобы понять намного позже, что это чрезвычайно сложный формат. YAML делает неправильные вещи look right - например, безобидный двоеточие : внутри одной строки в массиве строк делает YAML интерпретирует его как массив объектов. Это нарушает принцип наименьшего удивления . – Vicky Chijwani 31 January 2018 в 15:48
  • 5
    Кто-то сделал сайт по этой теме: yaml-multiline.info @SteveBennett ㄹ Если вы не знали, проверьте нижний колонтитул этой страницы. – udondan 4 March 2018 в 13:36
  • 6
Другие вопросы по тегам:

Похожие вопросы: