Предупреждение ShellCheck о цитировании ("A"B"C")

Посмотрите на блочную секцию blockinfile,https://docs.ansible.com/ansible/2.5/modules/blockinfile_module.html

Вот пример роли

user1$ cat testblock/tasks/main.yml
---
- name: Testing blockinfile
  blockinfile:
    path: /tmp/testfile.txt
    block: |
      
         this is a test1
         blah
         blah
       

       
         this is test2
         hello
       
...

А вот и сборник пьес:

user1$ cat testblock.yml
---
- hosts: localhost
  roles:
    - testblock
...

Запуск ansible-playbook./testblock.ymlсоздает следующий файл:

user1$ cat /tmp/testfile.txt
# BEGIN ANSIBLE MANAGED BLOCK

   this is a test1
   blah
   blah
 

 
   this is test2
   hello
 
# END ANSIBLE MANAGED BLOCK

4
27.12.2020, 01:10
2 ответа

Одна строка

ifconfig_"${Bridge}"="addm ${NIC}"

совпадает с

"ifconfig_$Bridge=addm $NIC"

(фигурные скобки не нужны, и вся строка может быть заключена в один набор двойных кавычек)

Поскольку вы использовали двойные кавычки для заключения в кавычки двух отдельных частей одной и той же строки, ShellCheck поинтересовался, возможно ли, что вы имели в виду, что «внутренняя пара» кавычек является буквальной и действительно частью строки, т. е. имели ли вы в виду написать fconfig_"${Bridge}\"=\"addm ${NIC}".

Поскольку вы этого не сделали, было бы лучше переписать строку, как я показал ранее, просто чтобы было ясно, что это одна строка без встроенных кавычек.

Обратите внимание, что вы не сделали ошибки в своем коде в отношении цитирования здесь, и что ShellCheck просто спрашивает о вашем намерении, потому что это (возможно )распространенная ошибка, когда вы делаете нужны буквальные двойные кавычки внутри строки.

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

# shellcheck disable=SC2140
sysrc ifconfig_"${Bridge}"="addm ${NIC}"

По сути, это означает: «Я знаю, что делаю, и правило SC2140 здесь не применяется, большое спасибо».

10
18.03.2021, 22:40

Если вы перейдете по предложенной ссылке объяснения для SC2140 , вы получите этот текст,

Проблемный код:

echo "<img src="foo.png" />" > file.html

или

export "var"="42"

Правильный код:

echo "<img src=\"foo.png\" />" > file.html

или

export "var=42"

Посмотрите на второй пример -структура почти идентична вашему коду

sysrc ifconfig_"${Bridge}"="addm ${NIC}"

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

sysrc "ifconfig_${Bridge}=addm ${NIC}"
3
18.03.2021, 22:40

Теги

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