Bash脚本未保留EOF的Javascript命令

时间:2019-02-25 13:32:54

标签: javascript bash

我正在尝试使用EOF在bash脚本中生成文件。该文件正在正确生成,但是,我在其中定义变量的一段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 );
     }
});

2 个答案:

答案 0 :(得分:2)

here-document的所有行都经过参数扩展,命令替换和算术扩展。

序列$( "#slider" )是命令替换。外壳程序运行#slider(由于它表示注释,所以是空操作),并用命令的输出(无输出)替换序列。

如果您希望脚本逐字输出JS的片段,则可以将here-document的分隔符放在单引号中:

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

答案 1 :(得分:1)

我在line / 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