我正在尝试使用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 );
}
});
答案 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