标签: heredoc

在Javascript中使用长字符串文字的最佳方法是什么?

可能重复:
Javascript中的多行字符串

在Ruby中你可以做这样的事情

temp = << - SQLCODE select*from users SQLCODE

这样,您的代码中就会有很长的字符串文字而不必转义大量字符.JavaScript中有类似的东西吗?

目前我有这样的javascript代码,它让我疯狂......

  new Element.update(lightbox_id, " \
    <div id='overlay' class='overlay' > \
    </div> \
    <div id='lightbox' class='lightbox'> \
      <div class='lightbox_title'> \
        <div class='corner_image' onclick=\"close_lightbox();return false;\"><a href='#' >" + corner_image + "</a></div> \
        <div class='lightboxname' id='lightboxname'>" + title + "</div> \
        <div class='close_image'> \
          <a href='#' onclick=\"close_lightbox();return false;\">Close</a> or Escape key\
        </div> \
      </div> \
      <div id='" + lightbox_content_id + "' class='lightbox_content'>    \
      </div> \
      <script>  \
        watch_for_escape(); \
      </script> \ …
Run Code Online (Sandbox Code Playgroud)

javascript ruby ruby-on-rails heredoc

6
推荐指数
1
解决办法
7945
查看次数

访问HEREDOC中数组的类属性

下面的示例中有两种不同的语法.一个工作,另一个不工作!实际上我希望它反过来.第二种语法对我来说看起来很糟糕.

<?php
class Vodoo
{
    public $foo = array();

    public function __construct()
    {
        $this->foo = array('one' => 1, 'two' => 2, 'three' => 3);
    }

    public function getFoo()
    {
        $return = <<<HEREDOC
<p>$this->foo[one]</p>      // outputs: "Array[one]"
<p>{$this->foo['two']}</p>  // outputs correct: "2"

HEREDOC;
        return $return;
    }
}
$bar = new Vodoo;
echo $bar->getFoo();
?>
Run Code Online (Sandbox Code Playgroud)

是否可以使用这些花括号并引用HEREDOC内的关联索引?

编辑:花括号内的表达式必须以它出现在字符串外面的方式编写!

php heredoc

6
推荐指数
1
解决办法
1779
查看次数

Bash:警告:here-document在由文件结尾分隔的行(想要'EOF')

bash中的以下函数会出现标题中提到的错误.当最终EOF不在行的开头时,通常会出现错误.

EOF是在开始,所以我看不出有什么问题.进一步在脚本(未显示)中还有其他here-docs,它们可以工作.

add_testuser()
{
    kadmin -p admin -q addprinc test
    cat <<EOF > ~/test.ldif
dn: cn=test,ou=groups,dc=${ARRAY[1]},dc=${ARRAY[2]}
cn: test
gidNumber: 20001
objectClass: top
objectClass: posixGroup

dn: uid=test,ou=people,dc=${ARRAY[1]},dc=${ARRAY[2]}
uid: test
uidNumber: 20001
gidNumber: 20001
cn: First_name
sn: Last_name
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
homeDirectory: /home/test
userPassword: {CRYPT}*
EOF 

    ldapadd -Qf ~/test.ldif
    kdestroy; kinit test
    klist
    ldapwhoami
}
Run Code Online (Sandbox Code Playgroud)

bash heredoc eof

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

如何使用 A ?在 PHP 中使用 heredoc 的 x:y 语法?

我试过这个,但只有一个语法错误:

<?php

$a = true;
$str = <<< EOF
{$a ? 1 : 2}
EOF;
echo $str;
Run Code Online (Sandbox Code Playgroud)

是否可以在 heredoc 中使用这种条件语句?

php syntax heredoc

5
推荐指数
1
解决办法
2871
查看次数

在groovy中,如何分配多行字符串而不使用转义斜杠(\)并且不进行插值

在 groovy 中,如果我想要没有插值且没有转义的多行字符串该怎么办

就像是:

    var1="hello hello"   
    var2="""/   
      adakldjkadj\^mk   
      as@da\kl#DFD#$#   
      ${var1}   
      d3&657\7fdsfsf   
    /"""   

println var2;
Run Code Online (Sandbox Code Playgroud)

应该打印出完全相同的内容,例如:

adakldjkadj\^mk
as@da\kl#DFD#$#
${var1}
d3&657\7fdsfsf

也就是说, ${var1} 尚未扩展,并且不需要转义 \ 并且它是多行字符串
那么如何在 GROOVY 中分配此 HEREDOC 字符串。这在 bash 脚本、ruby、perl 等中是可能的。

在 ruby​​ 中,它表示为(注意分隔符周围的引号,例如:'EOL')

a = <<'EOL'   
  adakldjkadj\^mk   
  as@da\kl#DFD#$#   
  yes ${var1}   
  d3&657\7fdsfsf   
EOL   
Run Code Online (Sandbox Code Playgroud)

如何在groovy中做到这一点?

groovy escaping heredoc multiline

5
推荐指数
1
解决办法
7913
查看次数

PHP Heredoc字符串规则

有人可以在这里探讨使用示例PHP代码片段在PHP中使用heredoc的复杂性吗?,根据手册下面的内容?

php.net手册说:

请注意,具有结束标识符的行必须不包含其他字符,除非可能是分号(;).这尤其意味着标识符可能没有缩进,并且在分号之前或之后可能没有任何空格或制表符.同样重要的是要认识到结束标识符之前的第一个字符必须是本地操作系统定义的换行符.这是\n在UNIX系统上,包括Mac OS X.结束分隔符(可能后面跟一个分号)后面也必须跟一个换行符.

如果此规则被破坏且结束标识符不是"干净",则不会将其视为结束标识符,PHP将继续查找.如果在当前文件结束之前未找到正确的结束标识符,则将在最后一行产生解析错误.

Heredocs不能用于初始化类属性.从PHP 5.3开始,此限制仅对包含变量的heredoc有效.

这是php手册的链接:http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

php string heredoc

5
推荐指数
3
解决办法
2万
查看次数

使用定界符作为 shell 的输入时,为什么 stdin 会关闭

我对此有点困惑

$ bash <<EOF
  read -p 'This will not work' input
EOF
Run Code Online (Sandbox Code Playgroud)

因为

$ cat script
read -p 'This will work fine' input
$ bash script
This will work fine
Run Code Online (Sandbox Code Playgroud)

有什么不同?这似乎是一种标准行为,因为ash行为方式完全相同。


根据迄今为止提供的答案,我怀疑(然后确认)以下方法有效。我认为这实际上是我一直想做的事情,但<()我总是忘记语法的存在。

$ bash <( cat <<EOF
  read -p 'This works' input
EOF
)
Run Code Online (Sandbox Code Playgroud)

shell heredoc

5
推荐指数
1
解决办法
754
查看次数

Vim HereDoc 高亮

我想在 bash heredoc 中突出显示语法。此外,我希望在 heredoc 中突出显示 bash 变量取消引用和命令替换。

使用这些说明作为起点,我能够通过检查sh.vim添加变量取消引用。我想您可以以类似的方式完成命令替换。

let s:bcs = b:current_syntax

unlet b:current_syntax
syntax include @YAML syntax/yaml.vim

syntax region hereDocYAML matchgroup=Statement start=/<<-\?\s*\z(YML\)/ end=/^\s*\z1/ contains=@YAML,hereDocDeref,hereDocDerefSimple

syn match  hereDocDerefSimple  "\$\%(\h\w*\|\d\)"
syn region hereDocDeref  matchgroup=PreProc start="\${" end="}"  contains=@shDerefList,shDerefVarArray

hi def link hereDocDeref PreProc
hi def link hereDocDerefSimple PreProc
Run Code Online (Sandbox Code Playgroud)

我的问题是,这似乎并没有工作,任何类型的块(iffunctionfor等)。例如:

突出例子

我唯一知道的是,这不是缩进问题。更改缩进没有效果,在块外使用缩进可以正常工作。

vim bash syntax-highlighting heredoc vim-syntax-highlighting

5
推荐指数
1
解决办法
1014
查看次数

使用此处文档以另一个用户身份运行脚本中的命令

我希望能够在脚本中间切换用户。这是一种尝试:

su - User << EOF

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" </dev/null

EOF
Run Code Online (Sandbox Code Playgroud)

我的目标是执行 EOF 分隔符之间的代码,就像我实际以用户身份登录一样。

中间一行应该安装 Homebrew。如果我以用户身份登录并单独运行中间行,它就可以正常安装。但运行上面的完整脚本给我带来了问题:

-e:5: unknown regexp options - lcal
-e:6: unknown regexp options - lcal
-e:8: unknown regexp options - Cach
-e:9: syntax error, unexpected tLABEL
BREW_REPO = https://github.com/Homebrew/brew.freeze
                  ^
-e:9: unknown regexp options - gthb
-e:10: syntax error, unexpected tLABEL
CORE_TAP_REPO = https://github.com/Homebrew/homebrew-core.freeze
                      ^
-e:10: unknown regexp options - gthb
-e:32: syntax error, unexpected end-of-input, expecting keyword_end
-bash: line 34: end: command not found …
Run Code Online (Sandbox Code Playgroud)

bash heredoc su

5
推荐指数
1
解决办法
3040
查看次数

由于heredoc,Cloudwatch 警报创建失败

我正在尝试使用 terraform 创建复合 cloudwatch 警报。但不幸的是我的 terraform 代码因以下错误而中断:

错误:创建 CloudWatch 复合警报时出错 (node-count-office-time-composite-alarm-DP-1474-desert):ValidationError:AlarmRule 不得包含前导或尾随空格或者为 null 状态代码:400,请求 ID:272b14ae- e6bd-4e65-8bb8-25372d9a5f7c

以下是我的地形代码:

resource "aws_cloudwatch_composite_alarm" "node_count_office_time_alarm" {
  depends_on = [aws_cloudwatch_metric_alarm.node_count, aws_cloudwatch_metric_alarm.office_time]
  alarm_description = "Composite alarm for node count & office time"
  alarm_name        = "node-count-office-time-composite-alarm-${local.postfix}"
  alarm_actions = [var.sns_topic_arn]
  ok_actions    = [var.sns_topic_arn]
alarm_rule =<<-EOF
ALARM(${aws_cloudwatch_metric_alarm.node_count.alarm_name}) AND
ALARM(${aws_cloudwatch_metric_alarm.office_time.alarm_name})
EOF
}
Run Code Online (Sandbox Code Playgroud)

我检查了很多次,我的alarm_rule中没有前导或尾随空格。AND 运算符后仅换行。我正在使用 terraform 0.15.3 版本。有人遇到类似的问题吗?我该如何解决这个问题?谢谢

heredoc amazon-cloudwatch terraform cloudwatch-alarms

5
推荐指数
1
解决办法
1296
查看次数