标签: heredoc

用"ESQ"帮助我理解这个Perl语句

substr($obj_strptime,index($strptime,"sub")+6,0) = <<'ESQ';
 shift; # package
 ....
 ....
ESQ
Run Code Online (Sandbox Code Playgroud)

这个ESQ是什么,它在这做什么?请帮我理解这些陈述.

perl heredoc

2
推荐指数
1
解决办法
1348
查看次数

JavaScript Heredoc?Escape Newline:JSLint Bad Escapement?

var wrapped_string = "shouldn't this\
work?"
Run Code Online (Sandbox Code Playgroud)

JSLint给出了一个糟糕的擒纵错误.

那么我们如何在JavaScript中使用heredoc呢?我有一个很长的HTML字符串.

javascript newline escaping jslint heredoc

2
推荐指数
1
解决办法
932
查看次数

我可以使用here文档附加到字符串吗?

我有一个字符串,我想附加一块格式化的SQL.有没有办法使用这里的文件追加?或者我是否需要使用here文档创建一个新字符串并将其附加到现有字符串?

perl heredoc

2
推荐指数
1
解决办法
2567
查看次数

ruby这里的文件

我正在尝试在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文档. …

ruby string heredoc string-interpolation

2
推荐指数
1
解决办法
2562
查看次数

php变量不能在heredoc中工作

我在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)

html php heredoc

2
推荐指数
1
解决办法
5943
查看次数

heredoc间距?

这是一个我知道的小问题.我们正在用Ruby写一个Bash荧光笔,需要实现heredoc高亮显示.我见过的两种格式是这样的.注意之前的空间EOF

cat <<EOF
Hello
World
EOF

cat << EOF
Hello
World
EOF
Run Code Online (Sandbox Code Playgroud)

问题是,在第一个之前使用空格是不正确/非官方/不良做法EOF

bash terminal heredoc

2
推荐指数
1
解决办法
395
查看次数

在heredoc中写入文字括号后跟变量

        $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~}

php heredoc

2
推荐指数
1
解决办法
798
查看次数

使用ssh通过SSH调用subshel​​l $()来执行bash命令

我尝试通过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解决方案将不起作用

ssh bash heredoc subshell

2
推荐指数
2
解决办法
2230
查看次数

如何在Python heredocs中插入变量?

在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)

以上所有三个都产生完全相同的输出:

#SBATCH job cutadapt
#SBATCH cpus-per-task …
Run Code Online (Sandbox Code Playgroud)

python heredoc string-interpolation

2
推荐指数
2
解决办法
1002
查看次数

在内部使用`gsub`(双引号)heredoc不起作用

似乎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里面发生了什么?

ruby heredoc literals

2
推荐指数
1
解决办法
49
查看次数