Сценарий Bash не сохраняет команду Javascript в EOF

Я пытаюсь создать файл в сценарии bash, используя EOF. Файл создается правильно, но часть кода javascript, где я определяю переменную, не учитывается и искажает код:

Фрагмент кода Javascript/Bash

cat << EOF > map.php
$( "#slider" ).slider({
  value:60,
min: 1.0,
max: 100.0,
  animate: true,
animate: 500,
slide: function( event, ui ) {
   historicalOverlay.setOpacity( ui.value/100 );
     }
});
EOF

Результат

.slider({
  value:60,
min: 1.0,
max: 100.0,
  animate: true,
animate: 500,
slide: function( event, ui ) {
   historicalOverlay.setOpacity( ui.value/100 );
     }
});

См. этот вопрос-ответ о цитировании в документации.

Benjamin W. 25.02.2019 15:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
40
2

Ответы 2

Все строки здесь-документ подвергаются расширению параметров, подстановке команд и арифметическому расширению.

Последовательность $( "#slider" ) является подстановкой команды. Оболочка запускает #slider (что не работает, потому что представляет комментарий) и заменяет последовательность выводом команды (без вывода).

Если вы хотите, чтобы ваш скрипт выводил фрагмент JS дословно, вы можете поместить разделитель здесь-документа в одинарные кавычки:

cat << 'EOF' > map.php
$("#slider").slider({
  value:60,
  min: 1.0,
  max: 100.0,
  animate: true,
  animate: 500,
  slide: function( event, ui ) {
    historicalOverlay.setOpacity( ui.value/100 );
  }
});
EOF

Это говорит оболочке не расширять какую-либо специальную последовательность внутри текста.

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

Применительно к приведенному выше коду это приводит к:

cat << EOF > map.php
\$("#slider").slider({
  value:60,
  min: 1.0,
  max: 100.0,
  animate: true,
  animate: 500,
  slide: function( event, ui ) {
    historicalOverlay.setOpacity( ui.value/100 );
  }
});
EOF

Что делать, если у меня есть настоящие переменные bash, которые мне нужно оставить? то есть команда date типа ${YYYYMMDD}

arnpry 25.02.2019 14:47

Хорошо, я исправил проблему... Я добавил \ перед строкой, и теперь она не читается.

arnpry 25.02.2019 14:52

В качестве альтернативы: поместите части, которые выглядят как расширения оболочки, в свои собственные переменные, например. slider='$("#slider)' (примечание: в одинарных кавычках), которые затем можно вставить в здесь-документ: cat << EOF ... ${slider}.slider({ ....

melpomene 25.02.2019 15:18

Я добавил обратную косую черту перед строкой/переменной JS:

cat << EOF > map.php
\$( "#slider" ).slider({
  value:60,
min: 1.0,
max: 100.0,
  animate: true,
animate: 500,
slide: function( event, ui ) {
   historicalOverlay.setOpacity( ui.value/100 );
 }
});
EOF

Другие вопросы по теме