可能重复:
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> \ …下面的示例中有两种不同的语法.一个工作,另一个不工作!实际上我希望它反过来.第二种语法对我来说看起来很糟糕.
<?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();
?>
是否可以使用这些花括号并引用HEREDOC内的关联索引?
编辑:花括号内的表达式必须以它出现在字符串外面的方式编写!
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
}
我试过这个,但只有一个语法错误:
<?php
$a = true;
$str = <<< EOF
{$a ? 1 : 2}
EOF;
echo $str;
是否可以在 heredoc 中使用这种条件语句?
在 groovy 中,如果我想要没有插值且没有转义的多行字符串该怎么办
就像是:
    var1="hello hello"   
    var2="""/   
      adakldjkadj\^mk   
      as@da\kl#DFD#$#   
      ${var1}   
      d3&657\7fdsfsf   
    /"""   
println var2;
应该打印出完全相同的内容,例如:
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   
如何在groovy中做到这一点?
有人可以在这里探讨使用示例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
我对此有点困惑
$ bash <<EOF
  read -p 'This will not work' input
EOF
因为
$ cat script
read -p 'This will work fine' input
$ bash script
This will work fine
有什么不同?这似乎是一种标准行为,因为ash行为方式完全相同。
根据迄今为止提供的答案,我怀疑(然后确认)以下方法有效。我认为这实际上是我一直想做的事情,但<()我总是忘记语法的存在。
$ bash <( cat <<EOF
  read -p 'This works' input
EOF
)
我想在 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
我的问题是,这似乎并没有工作,任何类型的块(if,function,for等)。例如:
我唯一知道的是,这不是缩进问题。更改缩进没有效果,在块外使用缩进可以正常工作。
vim bash syntax-highlighting heredoc vim-syntax-highlighting
我希望能够在脚本中间切换用户。这是一种尝试:
su - User << EOF
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" </dev/null
EOF
我的目标是执行 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 …我正在尝试使用 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
}
我检查了很多次,我的alarm_rule中没有前导或尾随空格。AND 运算符后仅换行。我正在使用 terraform 0.15.3 版本。有人遇到类似的问题吗?我该如何解决这个问题?谢谢