heredoc 相关问题

Here-document是在源代码中编写文字字符串的特殊语法,由不同的编程语言使用。

为什么heredoc中不允许使用类常量?

我想在heredoc中使用一个类常量,该常量在注释中使用,但这给了我一个错误。 类示例{ #[我的注释(架构:<< 我想在heredoc中使用一个类常量,该常量在注释中使用,但这给了我一个错误。 class Example { #[MyAnnotation(schema:<<<YAML type: {${MyOtherClass::A_CONSTANT}} YAML)] function myFunction() {} } 结果:PHP Fatal error: Constant expression contains invalid operations 这看起来类似于 另一个heredoc问题,但作为一个const值,这应该在编译时可用。 我找不到任何关于为什么这不起作用的信息。我很高兴能找到遇到类似问题的人的线索,或者找到一种更优雅的方式来编写 JSONSchema,而无需链接多个heredocs。当然,我可以只使用字符串。 为什么类常量可以在普通表达式中的heredoc中使用,但不能在注释中使用。 这是我当前在 PHP 8.1 中的解决方法: class Example { #[MyAnnotation(schema:<<<YAML type: YAML . MyOtherClass::A_CONSTANT)] function myFunction() {} } 这在现有的语言中是不可能的。有关于字符串插值更改的讨论(请参阅评论),但不是我认为可能的风格。 许多其他语言使用 ${foo} 样式字符串插值,最显着的是 bash 和 JavaScript(在模板文本中)。然而,它的行为与 PHP 中的行为不同。在 PHP 中,该语法意味着变量。在 JavaScript 中,它支持任意表达式 2)。在目前的形式中,[美元符号后的大括号(“${foo}”)]和[变量]的用途有限,并且会让其他附近语言的用户感到困惑,因为它们的行为完全不同。 PHP RFC:弃用 ${} 字符串插值 这也是我困惑的来源。

回答 1 投票 0

仅使用 echo 和 cat 命令通过 ssh 传输文件

由于一些限制,我必须仅使用 echo 和 cat 命令以及此处文档将本地文件传输到远程 ssh。 我试过了: #!/bin/bash SSH_CMD=xxx # 假设 `SSH_CMD` 是我的 ssh 命令 w=&q...

回答 1 投票 0

在 PHP7.2 中使用 HEREDOC 语法时出现“语法错误,意外的 '' (T_ENCAPSED_AND_WHITESPACE)”,但 PHP7.4 没问题

if (array_key_exists('icon_path', $changedAttributes)) { $iconFile = $changedAttributes["icon_path"]; } 为什么 $iconFile = $changedAttributes["icon_path"];线给了我...

回答 1 投票 0

此处文档给出“意外的文件结尾”错误

我需要我的脚本从终端发送电子邮件。根据我在这里和网上许多其他地方看到的内容,我将其格式化如下: /var/mail -s "$SUBJECT" "$EMAIL" << EOF Here's a line of...

回答 9 投票 0

如果定界符为“”,如何使命令停止等待输入?

在 POSIX shell 中(在本例中我们考虑 bash),每当我们运行 cmd << eof, the shell expects input until a string containing only eof is received. Also, the standard states that: If...

回答 1 投票 0

在 zsh 中可以使用heredoc进行进程替换。如何让它在 bash 中工作?

我希望能够将定界文档传递给源命令以进行本地解释。 Heredoc 文档的主体将在稍后调用脚本之前注入,并且可以是多行的。 我上来了

回答 2 投票 0

当我已经在引用地狱时使用带有撇号的变量

我正在奔跑…… xargs -0 somescript -C << EOF drush ev 'somethingelse("$STRING",[]);' EOF somescript is a script I need to run and I do not control. It expects a command as an argu...

回答 1 投票 0

检查 oracle db 模式,因为另一个用户失败了

我试图通过执行以下代码来获取 Oracle DB 模式 - 如果它处于读写模式 - 但出现错误。 我试过: 状态=$(su - orasid -c "sqlplus "/as sysdba " \<\...

回答 1 投票 0

为什么 bash 在评估我的变量时插入了不需要的“'”?

我有这个脚本: #!/bin/bash TOKEN='faketokendgfhjkdhf' KEYNAME="test_$(日期+'%m-%Y')" 回显$KEYNAME KEYPATH="$HOME/.ssh/${KEYNAME}" 回显$KEYPATH SSHPHRASE="测试短语...

回答 1 投票 0

Docker 的 RUN 文档示例不起作用

我尝试实现Docker本身提供的示例(https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/) # 语法=docker/dockerfile:1.3-labs 来自 ubuntu:20.04 奔跑<<...

回答 2 投票 0

MacBook 上的 Bash HereDoc 变量出现换行符错误

我有一个脚本可以在 Ubuntu 22.04 上使用 Bash 愉快地运行。但是,在 Arm MacBook 上的 bash (v 5.2) 下执行相同的脚本时,会开始出现错误。 以下是有问题的部分...

回答 1 投票 0

ubuntu:将多行写入文本文件[关闭]

我正在尝试将多行写入文本文件,如下所示: 猫 <> /etc/apache2/sites-available/eco.conf 服务器名称 eco.vagrant 文档根目录 /var/...

回答 2 投票 0

将常量(非变量)插入“heredoc”

考虑: my_const 的值为 {my_const}。 麦可; ?> 如果我将变量放在大括号内,它会...

回答 8 投票 0

如何cat <<EOF >>包含代码的文件?

我想使用 cat <> 将代码打印到文件中: 猫 <> Brightup.sh !/bin/bash curr=`cat /sys/class/backlight/intel_backlight/actual_brightness` 如果 [ $curr -lt 44...

回答 6 投票 0

在 bash 'heredoc' 中捕获标记词

bash 中“heredoc”字符串的开头通常看起来像 猫 < bash 中“heredoc”字符串的开头通常看起来像这样 cat <<EOF or cat << EOF 即两个小于号字符和标记词“EOF”之间可能有空格,也可能没有空格。我想捕捉标记词,所以我尝试以下 $ pcretest PCRE version 8.45 2021-06-15 re> "^\s*cat.*[^<]<{2}[^<](.*)" data> cat << EOF 0: cat << EOF 1: EOF data> cat <<EOF 0: cat <<EOF 1: OF 正如您在字符串中看到的,<< and EOF, I only catch "OF" and not "EOF". The expression must match exactly two less-than signs and fail if there are three or more. But why does it gobble up the 'E' so that only "OF" is returned?之间没有空格 在您的模式中,使用的是否定字符类 [^<],它与 < 以外的单个字符匹配,在本例中是字符串 E 中的 <<EOF 字符 对于您的示例和使用 pcre,您可以匹配前导空格,然后匹配 << 而无需后续 < ^\h*cat\h+<<(?!<)(.*) 模式匹配: ^ 字符串开头 \h* 匹配可选的水平空白字符 cat\h+ 匹配 cat 和 1+ 个水平空白字符 <<(?!<) 匹配 << 并直接断言不是 < 到右侧 (.*) 捕获第 1 组中的可选字符 查看 正则表达式演示

回答 1 投票 0

将多行变量切换到heredoc

我正在尝试将多行变量添加到将被放入 Markdown 文件中的定界文档中。 我的脚本如下所示: 降价=$(猫<<-EOF 测试 我正在尝试将多行变量添加到将被放入 Markdown 文件中的定界文档中。 我的脚本如下所示: markdown=$(cat <<-EOF <details> <summary>TEST</summary> ${output} </details> EOF ) echo "$markdown" >> test.md 其中output是多行字符串: this is a multiline string 当我运行脚本时,输出如下所示: <details> <summary>TEST</summary> this is a multiline string </details> 我怎样才能得到它,以便不仅仅是输出变量的第一行被正确标记?我尝试通过 sed 运行变量并添加选项卡,但这不起作用 你必须缩进它。你自己。例如,使用 sed 在每行前面添加 4 个空格: cat <<-EOF <details> <summary>TEST</summary> $(sed 's/^/ /' <<<"$output") </details> EOF 您可以用换行符和 4 个空格替换换行符: cat <<-EOF <details> <summary>TEST</summary> ${output//$'\n'/$'\n' } </details> EOF

回答 1 投票 0

如何将 sqlplus 与定界符和文件替换参数一起使用

因此,我尝试通过将要执行的脚本包装在“页眉”和“页脚”中,将一些默认配置应用于每次调用 sqlplus,以便获得一致的 exe...

回答 1 投票 0

bash HERE 文档评估

我在 bash 中发现了一个奇怪的问题 我使用 HERE-doc 如下 来源 <(cat << EOL | tee /tmp/buildvar_eval.sh TODAY=$(date +%y%m%d) PATH_JOB=$HOME PATH_SRC=${PATH_JOB}/aaaa PATH_OUT=${PATH_SRC}/bbbb

回答 1 投票 0

如何cat <<EOF >>包含代码的文件?

我想使用 cat <> 将代码打印到文件中: 猫 <> Brightup.sh !/bin/bash curr=`cat /sys/class/backlight/intel_backlight/actual_brightness` 如果 [ $curr -lt 44...

回答 7 投票 0

在 shell 脚本参数中以开发人员友好的方式编写 JSON

我有一个 shellscript,我需要将 JSON 作为函数参数传递 我想编写对开发人员友好的缩进代码,而不是编写难以维护的单行参数或多行参数...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.