标签: heredoc

使用Java源代码中的大型文本片段

有没有什么好的方法可以在Java源代码中使用文本块(字符串)?许多其他语言都有heredoc语法可供他们使用,但Java没有.这使得处理诸如输出大量静态标记的标记库之类的东西以及需要断言与XML块的比较的单元测试非常不方便.

其他人如何解决这个问题?它甚至可能吗?或者我只是忍受它?

java text heredoc

21
推荐指数
1
解决办法
9753
查看次数

如何在关联数组中使用PHP here-doc?

我需要通过here-doc将更多的多行文本放入PHP关联数组中.它看起来像这样:

    $data = [
      "x" => "y",
      "foo" => "bar",
      /* ... other values ... */
      "idx" = <<< EOC
data data data data
data data data data
data data data data
EOC;
      "z" => 9,
      /* ... more values ... */
    ];
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何通过here-doc将元素"idx"与多行文本放在$ data数组中.

php arrays associative-array heredoc

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

在bash中使用heredoc之后使用&&

我有一个bash脚本,其命令我链接在一起&&,因为我希望脚本停止,如果单个步骤失败.

其中一个步骤基于heredoc创建配置文件:

some_command &&
some_command &&
some_command &&
some_command &&
some_command &&
some_command &&
cat > ./my-conf.yml <<-EOF
host: myhost.example.com
... blah blah ...
EOF
... lots more commands ...
Run Code Online (Sandbox Code Playgroud)

如何在&&链中包含此命令?我试过了:

  • &&在EOF之后立即放置.不起作用,因为EOF必须独立.
  • &&按照EOF 放置在一条线上.不行,因为bash认为我正在尝试&&用作命令.
  • 放置&&>重定向器之前.没有用,因为重定向器在逻辑上是命令的一部分&&.

澄清:

在从heredoc生成配置文件的命令后面有很多(多行)命令,所以理想情况下我正在寻找一个允许我在heredoc之后放置以下命令的解决方案,这是脚本的自然流程.那就是我不希望在一行上内联20多个命令.

bash heredoc

18
推荐指数
1
解决办法
3404
查看次数

PHP表达式<<< EOB

我已经用PHP开发了几年了,最近发现了这段代码:

<?php
    echo <<<EOB
        <html>
        <head>
            <title>My title</title>
        </head>
        ...
    EOB;
?>
Run Code Online (Sandbox Code Playgroud)

我从来没有见过这种打印HTML的方法,这似乎非常有用,并且不太容易出现一些奇怪的变量或双引号语法错误.

我已经搜索了一些关于此的官方信息,并且只找到了Rasmus谈论此事的帖子.

有关此功能的详细说明是什么,EOB是什么意思?可能结束了

html php heredoc

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

Makefile中的Heredoc?

这有可能吗?怎么样?

更新:我需要这个,因为我从动态和静态数据创建了一个文件.

使用案例:我有一个测试目录.每个C文件生成一个测试可执行文件 同

SRCS = $(wildcard [a-z]*.c)
Run Code Online (Sandbox Code Playgroud)

我可以根据需要添加新的测试,make会找到新的测试,编译,运行和valgrind它们.我也用git.我.gitignore想要包含可执行文件.

所以那里.如何创建.gitignore和包含静态数据,即我想要忽略的文件(*.odepend)以及动态可执行文件?

makefile heredoc gitignore

17
推荐指数
3
解决办法
1万
查看次数

格式化Heredoc中的数组值

我想知道为什么我不能{number_format($row['my_number'])}在Heredoc里面做些什么.有没有办法解决这个问题,而不必诉诸于定义$myNumber下面的变量?

看了http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc但什么也没找到.

foreach ($dbh -> query($sql) as $row):
    $myNumber = number_format($row['my_number']);

    $table .= <<<EOT
          <tr>
          <td>{$row['my_number']}</td> // WORKS
          <td>$myNumber</td> // WORKS
          <td>{number_format($row['my_number'])}</td> // DOES NOT WORK!
          </tr>
EOT;
endforeach;
Run Code Online (Sandbox Code Playgroud)

php arrays heredoc

17
推荐指数
1
解决办法
1万
查看次数

是否可以在unix bash脚本中嵌套Here Document?

是否有可能在另一个heredoc中写一个heredoc?

ssh -T -q yxz@server1 <<-"END_TEXT"
.
.
    ssh -T -q abc@server2 <<-"SUB_TEXT"
    .
    .
    SUB_TEXT
.
.
END_TEXT
Run Code Online (Sandbox Code Playgroud)

unix shell heredoc

17
推荐指数
1
解决办法
5130
查看次数

HEREDOC干扰代码缩进

我喜欢HEREDOC语法,例如,生成的HTML的边缘情况,不值得放入模板.

但是,唯一令我烦恼的是,内容和heredoc字符串的结束标记符合第一列.这搞砸了嵌套的代码布局:

class myclass 
 { 

    function __construct()
      { 
       $a = some_code();
       $b = some_more_code();
       $x = <<<EOT

line1
line2
line3
line4

EOT;    

        $c = even_more_code();
        $b = still_more_code();
        ...
        ...
        ...
Run Code Online (Sandbox Code Playgroud)

你明白我的意思了.

现在使用正常的HEREDOC可能无法解决这个问题.有没有人解决这个问题?我的梦想是使用HEREDOC语法进行自动缩进.但我想如果不为源文件编写一些预编译器,这是不可能的.

我对么?

php heredoc

16
推荐指数
3
解决办法
7681
查看次数

简单的PHP模板......这可以在没有`eval`的情况下工作吗?

更新 -感谢所有回复.这个问题变得有些混乱,所以如果有人感兴趣,我就开始续集了.


我正在为朋友拼凑一个快速脚本,并偶然发现了一种在PHP中进行模板化的简单方法.

基本上,我们的想法是将html文档解析为heredoc字符串,因此PHP中的变量将被扩展.

passthrough函数允许在字符串中进行表达式求值和函数以及静态方法调用:

function passthrough($s){return $s;}
$_="passthrough";
Run Code Online (Sandbox Code Playgroud)

在heredoc字符串中解析文档的代码非常简单:

$t=file_get_contents('my_template.html');
eval("\$r=<<<_END_OF_FILE_\n$t\_END_OF_FILE_;\n");
echo $r;
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,它使用eval.

问题

  • 任何人都可以想到一种方法来做这种模板而不使用eval,但没有添加解析器或大量的正则表达式疯狂?

  • 没有编写完整的解析器,任何逃避不属于PHP变量的流浪美元符号的建议?流浪的美元符号问题是否会使这种方法不适合"严重"使用?


这是一些模板化的HTML代码示例.

<script>var _lang = {$_(json_encode($lang))};</script>
<script src='/blah.js'></script>
<link href='/blah.css' type='text/css' rel='stylesheet'>

<form class="inquiry" method="post" action="process.php" onsubmit="return validate(this)">

  <div class="filter">
    <h2> 
      {$lang['T_FILTER_TITLE']}
    </h2>
    <a href='#{$lang['T_FILTER_ALL']}' onclick='applyFilter();'>
      {$lang['T_FILTER_ALL']}
    </a>
    {$filter_html}
  </div>

  <table class="inventory" id="inventory_table">
    {$table_rows}
    <tr class="static"><th colspan="{$_($cols+1)}">
      {$lang['T_FORM_HELP']}
    </th></tr>
    {$form_fields}
    <tr class="static">
      <td id="validation" class="send" colspan="{$cols}">&nbsp;</td>
      <td colspan="1" class="send"><input type="submit" value="{$lang['T_SEND']}" /></td>
    </tr>
  </table>

</form>
Run Code Online (Sandbox Code Playgroud)

为什么要使用模板? …

php templates eval heredoc

16
推荐指数
3
解决办法
6069
查看次数

python -c vs python - << heredoc

我试图在Bash脚本中运行一些Python代码,所以我想了解之间的区别是什么:

#!/bin/bash
#your bash code

python -c "
#your py code
"
Run Code Online (Sandbox Code Playgroud)

VS

python - <<DOC
#your py code
DOC
Run Code Online (Sandbox Code Playgroud)

我检查了网络,但无法编译主题周围的位.你认为一个比另一个好吗?如果你想从Python代码块返回一个值到你的Bash脚本,那么heredoc是唯一的方法吗?

python bash heredoc

16
推荐指数
3
解决办法
5364
查看次数

标签 统计

heredoc ×10

php ×5

arrays ×2

bash ×2

associative-array ×1

eval ×1

gitignore ×1

html ×1

java ×1

makefile ×1

python ×1

shell ×1

templates ×1

text ×1

unix ×1