substr($obj_strptime,index($strptime,"sub")+6,0) = <<'ESQ';
shift; # package
....
....
ESQ
Run Code Online (Sandbox Code Playgroud)
这个ESQ是什么,它在这做什么?请帮我理解这些陈述.
var wrapped_string = "shouldn't this\
work?"
Run Code Online (Sandbox Code Playgroud)
JSLint给出了一个糟糕的擒纵错误.
那么我们如何在JavaScript中使用heredoc呢?我有一个很长的HTML字符串.
我有一个字符串,我想附加一块格式化的SQL.有没有办法使用这里的文件追加?或者我是否需要使用here文档创建一个新字符串并将其附加到现有字符串?
我正在尝试在Ruby中编写一个方法,该方法使用带有输入变量的HTML代码的here-document并相应地填充它们.
我的方法是:
calcForm(left, op, right, result)
Run Code Online (Sandbox Code Playgroud)
我正在使用的html标签是
<input type="text" name="left" value="?????">
<select name="op">
<option value="add" ?????>+</option>
<option value="mul" ?????>*</option>
</select>
<input type="text" name="right" value="?????">
=
?????
Run Code Online (Sandbox Code Playgroud)
到处都有问号,我的方法必须填写变量left,op,right和result.
例如,
calcForm(6, "mul", 7, 42)
Run Code Online (Sandbox Code Playgroud)
应该返回字符串:
<input type="text" name="left" value="**6**">
<select name="op">
<option value="add">+</option>
<option value="mul" **selected**>*</option>
</select>
<input type="text" name="right" value="**7**">
=
**42**
Run Code Online (Sandbox Code Playgroud)
因此,"选择"一词应出现在"添加"或"jul"之后,取决于op的值,左侧和右侧的值应填入value ="...",结果应出现在最后一行.
我是ruby的新手,但到目前为止,这是我对这里文档的了解:
the_tags = <<HERE
<input type="text" name="left" value=#{left}>
<select name="op">
<option value="add" #{op}>+</option>
<option value="mul" #{op}>*</option>
</select>
<input type="text" name="right" value=#{right}>
=
#{result}
HERE
def calcForm(left,op,right,result)
Run Code Online (Sandbox Code Playgroud)
我被困在这一点上.我很困惑如何将我的方法calcForm连接到上面的here文档. …
我在3周前写了一个heredoc,它工作得很好,直到今天它还使用了5个php变量.
这是heredoc:
echo <<<itemDetails_HEREDOC
<img src="$sitePath/images/logo-landing2.png" />
<form action="$thisFilename" method="post" name="arti-form" id="arti-formId">
<label style="display: inline-block; width: 140px">OWNER NAME:</label><input type="text" style="width: 300px"
id="ownerId" name="ownerName" readonly="readonly" value="$theLoggedInUser" /><br />
<label style="display: inline-block; width: 140px">THE ITEM:</label><input type="text" style="width: 300px"
readonly="readonly" id="itemNameId" name="itemName" value="$itemName" /><br />
<label style="display: inline-block; width: 140px">LINK:</label><input type="text" style="width: 300px"
readonly="readonly" id="itemLinkId" name="link" value="$theLinkID" /><br />
<label style="display: inline-block; width: 140px">ERA:</label><input type="text" style="width: 70px"
readonly="readonly" id="itemEraId" name="itemEra" value="$itemEra" /><br />
itemDetails_HEREDOC;
Run Code Online (Sandbox Code Playgroud)
上面的heredoc中有六(6)个php变量.第一个($ sitePath)不工作.我今天刚加了.
由于某种原因,服务器没有正确替换'$ sitePath'(我的heredoc中的第一个php变量),因为当浏览器收到上述页面时,会产生错误:
Notice: Undefined variable: sitePath in …Run Code Online (Sandbox Code Playgroud) 这是一个我知道的小问题.我们正在用Ruby写一个Bash荧光笔,需要实现heredoc高亮显示.我见过的两种格式是这样的.注意之前的空间EOF
cat <<EOF
Hello
World
EOF
cat << EOF
Hello
World
EOF
Run Code Online (Sandbox Code Playgroud)
问题是,在第一个之前使用空格是不正确/非官方/不良做法EOF?
$js = <<<EOS
var data = {$jsObjectData};
EOS;
Run Code Online (Sandbox Code Playgroud)
结果是 var data = ~some object data~
逃脱支具:
$js = <<<EOS
var data = \{$jsObjectData};
EOS;
Run Code Online (Sandbox Code Playgroud)
结果是 var data = \{~some object data~}
我无法理解为什么反斜杠会通过它泄漏.
期望的输出: var data = {~some object data~}
我尝试通过ssh发送命令,如下所示:
ssh user@192.168.1.1 "echo $(uname -a)"
Run Code Online (Sandbox Code Playgroud)
但是我的问题是,该$(uname -a)部分实际上创建了一个子外壳,并且不在192.168.1.1服务器上执行,而是在从中执行此命令的系统上执行。
我该如何解决?
PS我的实际示例涉及docker stop all命令,看起来像
docker stop $(docker ps -q)
Run Code Online (Sandbox Code Playgroud)
但我简化了问题。
更新:对不起,我简化了我的问题。我的命令使用Here Document(因为命令内部很复杂,并且使用了许多不同的引号)
ssh user@192.168.1.1 <<SSHCOMMAND
echo $(uname -a)
SSHCOMMAND
Run Code Online (Sandbox Code Playgroud)
因此,Ignacio Vazquez-Abrams解决方案将不起作用
在Perl语言中,我可以用双引号heredocs进行插值:
Perl的:
#!/bin/env perl
use strict;
use warnings;
my $job = 'foo';
my $cpus = 3;
my $heredoc = <<"END";
#SBATCH job $job
#SBATCH cpus-per-task $cpus
END
print $heredoc;
Run Code Online (Sandbox Code Playgroud)
Rakudo Perl 6:
#!/bin/env perl6
my $job = 'foo';
my $cpus = 3;
my $heredoc = qq:to/END/;
#SBATCH job $job
#SBATCH cpus-per-task $cpus
END
print $heredoc;
Run Code Online (Sandbox Code Playgroud)
我如何在Python中做类似的事情?在搜索"heredoc字符串插值Python"时,我确实遇到了有关Python f字符串的信息,这有助于字符串插值(适用于Python 3.6及更高版本).
带有f-strings的Python 3.6+:
#!/bin/env python3
job = 'foo'
cpus = 3
print(f"#SBATCH job {job}")
print(f"#SBATCH cpus-per-task {cpus}")
Run Code Online (Sandbox Code Playgroud)
以上所有三个都产生完全相同的输出:
Run Code Online (Sandbox Code Playgroud)#SBATCH job cutadapt #SBATCH cpus-per-task …
似乎gsub在(双引号)heredoc内部使用不会评估结果gsub,如下所示:
class Test
def self.define_phone
class_eval <<-EOS
def _phone=(val)
puts val
puts val.gsub(/\D/,'')
end
EOS
end
end
Test.define_phone
test = Test.new
test._phone = '123-456-7890'
# >> 123-456-7890
# >> 123-456-7890
Run Code Online (Sandbox Code Playgroud)
第二个puts应该打印1234567890,就像在这种情况下一样:
'123-456-7890'.gsub(/\D/,'')
# => "1234567890"
Run Code Online (Sandbox Code Playgroud)
heredoc里面发生了什么?