命令替换中的 Heredoc:引号或括号不平衡时出错(bash 和 zsh)

2023-12-22

考虑以下用于打印单引号的混淆脚本,该脚本适用于ksh:

#!/bin/ksh
echo "$(cat <<EOF
'
EOF
)"

Output:

'

但是,当我运行相同的脚本时bash 3.2.51(1)在 OS X 上,

#!/bin/bash
echo "$(cat <<EOF
'
EOF
)"

bash 报告以下错误:

./heredoc-within-cmdsubst: line 3: unexpected EOF while looking for matching `''
./heredoc-within-cmdsubst: line 6: syntax error: unexpected end of file

并运行zsh 5.0.2,

#!/bin/zsh
echo "$(cat <<EOF
'
EOF
)"

zsh 报告以下错误:

./heredoc-within-cmdsubst:6: unmatched "

当单引号被双引号或括号替换时,也会发生类似的错误。如果我用匹配的单引号/双引号/括号来平衡单引号/双引号/括号,那么脚本在 bash 和 zsh 中都可以正常运行。

这个问题只是 bash 和 zsh(相关版本)中的一个错误,还是这里违反了任何语法规则?


我会认为这是一个解析错误,直到/除非开发人员另有说明。该代码适用于dash按原样,并且存在类似的未闭合引号错误this zsh问题 https://stackoverflow.com/q/25778521/1126841.

更新:这实际上已修复bash4.1;我只签到过zsh5.0.2(最新版本为5.0.6)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

命令替换中的 Heredoc:引号或括号不平衡时出错(bash 和 zsh) 的相关文章

  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • Bash - 将键绑定到字符串(不是函数)

    如何获得键绑定以导致在命令行插入任意文本 在 zsh 中我这样做 bindkey s m myspecialscript 在 bash 中 有等效的吗 没有一个内置函数可以实现我想要的功能 bind e E home yourscript
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 如何制作 Bash 脚本来查找项目中未使用的图像?

    如何制作一个 Bash shell 脚本 它可以识别所有 jpg gif 和 png 文件 然后识别文件夹中任何文本文件中哪些文件未通过 url href 或 src 链接 这就是我开始的 但我最终得到了与我想要的相反的结果 我不想知道引用
  • 如何从 LaTeX 执行 shell 脚本?

    我正在尝试在 LaTeX 中执行以下操作 documentclass article begin document execute usr local bin my shell script sh end document 想法是执行 us
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • GitHub Actions:如何将 toJSON() 结果传递给 shell 命令

    因此 我正在与 Github Actions 合作进行端到端测试 我正在查看的设置是让一项作业检索要测试的 url 列表 而我的第二项作业使用该列表创建一个矩阵并测试所有这些 我的问题是 当我实际运行测试脚本时 必须从命令行完成 因为我使用
  • zsh:命令替换和正确引用

    我有一个脚本P它接受文件名作为参数 P file1 file2 file3 我也有一个脚本G它生成一个 通常是短列表 文件名 每行一个文件名 在我想写的主脚本中zsh 我想用G生成要处理的文件名P 天真的尝试是这样的 P G 这几乎很有效
  • 在 Bash 中替换垂直线

    我很难完成我的脚本 因为这一部分没有按照我想要的方式运行 我的脚本中有这一行 cat home tmp temp1 txt awk gsub RS gsub RS print gt home tmp temp txt 效果很好 是的 但是当
  • Bash for Windows 10 gcc 不会编译粘贴到根目录中的 c 文件

    正如标题所示 如果我将在其他地方编写的c文件粘贴到Linux子系统的根目录中 则无法编译它 我做了一个测试 我制作了两个不同标题的 hello world 程序 一个在 vi 中 我可以从 bash 界面进入 另一个在其他地方 当我编译了
  • Python DNS服务器IP地址查询

    我正在尝试使用 python 获取 DNS 服务器 IP 地址 要在 Windows 命令提示符下执行此操作 我将使用 ipconfig 全部 如下所示 我想使用 python 脚本做同样的事情 有什么方法可以提取这些值吗 我成功提取了设备
  • 如何安装 grunt-cli 而不出现错误?

    灵感来自 Chris Coyierpost http 24ways org 2013 grunt is not weird and hard 我决定尝试一下 grunt 但我在设置时遇到了很大的问题 首先 我安装了 Node js 然后我将
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • 每次重新运行终端时,我都必须输入 export PATH=~/anaconda/bin:"$PATH"

    我已经安装了 Anaconda for Mac 但出现了一些问题 当我输入命令时which conda or which ipython I get conda not found and ipython not find 然后我找到这个命
  • Jenkins:如何在 Windows 从机中执行 shell 脚本

    我有一个 Windows 从机 安装了 bash 我正在尝试在其上运行 shell 脚本作为预构建步骤 关于我如何做到这一点有什么想法吗 您需要使用脚本作为参数来运行 bash bash yourscript
  • Bash:读入多个局部范围变量

    根据这个答案 https stackoverflow com a 1952480 582917 https stackoverflow com a 1952480 582917 我可以读入并因此分配多个变量 但是我希望这些变量是 bash
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 在 macOS 上使用 find 时出现“非法选项”错误

    我试图列出末尾仅带有字母 R 的文件 我用了find在 macOS 终端中如下所示 find type f name R 但我收到消息说illegal option t 第一个参数find是它应该开始寻找的路径 路径 表示当前目录 find
  • Bash 中单行 while 循环的语法

    我无法找到分号和 或大括号的正确组合 我想这样做 但作为命令行中的一句 while 1 do foo sleep 2 done while true do foo sleep 2 done 顺便说一句 如果您在命令提示符下将其输入为多行 如

随机推荐

  • Scapy 可变长度字段

    我试图理解 PacketListField 和 FieldListField 之间的区别 有人可以让我知道在添加新协议时如何使用它们吗 我也不清楚StrLenField FieldLenField和PacketLenField 我正在尝试制
  • 使用带有 ldap_sasl_bind_s 函数的 kerberos 凭证通过 GSSAPI 进行 SASL 绑定

    我正在尝试使用 kerberos 凭据和 ldap sasl bind s 函数通过 GSSAPI 实现 SASL 绑定 我按照中描述的步骤操作ldap sasl bind s GSSAPI 凭证 BERVAL 结构中应提供什么 https
  • 函数参数中的 `type_alias{}` VS `char[N]{}`

    环境 x86 64Clang 6 0 0 函数的定义 void foo const char foo char 16 houston there is a problem foo type alias
  • 您可以在 iPhone 上执行 Ping 或 Traceroute 命令吗?

    奇怪的问题 我知道我可以在 OS X Objective C 中执行此操作 但是您可以对 iPhone 上的 IP 或 URL 运行 ping 吗 有框架支持吗 与执行跟踪路由相同 None
  • VBA查找多个文件

    我有这段代码 它根据搜索字符串查找文件名 以及文件路径 这段代码在查找单个文件时效果很好 我希望这个宏能够查找多个文件并使用逗号分隔显示它们的名称 Function FindFiles path As String SearchStr As
  • boost::python:编译失败,因为复制构造函数是私有的

    我使用 boost python 来包装 C 类 这个类不允许复制构造函数 但 python 模块总是想创建一个 C 类看起来像这样 简化 class Foo public Foo const char name constructor p
  • EntityMode.Map 与 Hibernate 4.2.6+ Spring 3.2

    我正在尝试使用动态休眠模型 下面是获取会话的代码片段 我已经声明了 hibernate default entity mode as dynamic map 在 hibernate 会话工厂配置 xml 中 Declared at clas
  • 强制 Backbone 将属性保存为文件

    有没有办法使用Model set and Model save以强制 Backbone 将数据作为文件发送到服务器的方式 就像您提交带有
  • Javascript库:混淆还是不混淆 - 这就是问题[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要编写一个与 GUI 相关的 javascript 库 它将给我的网站带来一点优势 就我可以提供的
  • []byte(字符串) 与 []byte(*字符串)

    我很好奇为什么 Go 不提供 byte string 方法 从性能角度来说 不会 byte string 复制输入参数并增加更多成本 尽管这看起来很奇怪 因为字符串是不可变的 为什么要复制它们 byte something 不是函数 或方法
  • 评估 PHP 中的 XPath 2.0

    我目前正在开发一个用 PHP 编写的项目 并且想要评估 XML 文件上的 XPath 表达式 由于文件相当复杂 我的 XPath 包含如下表达式为了 回报 循环或 XPath 2 引入的其他功能 不幸的是 PHP 的DOMXPath htt
  • facebook javascript sdk 登录在 iOS 上不起作用/移动设备的最佳实践

    我试图允许用户使用 javascript SDK 通过 facebook 登录登录我的 web 应用程序 它适用于桌面 safari 和 chrome 但弹出窗口在 iOS 上的 safari 和 chrome 上均失败 该错误直接发送至不
  • Laravel PHPUnit 模拟请求

    我正在我的控制器上执行 PHPUnit 但我似乎无法正确模拟请求 这是控制器 use Illuminate Http Request public function insert Request request some codes her
  • 无法生成临时类(结果=1)。错误CS0030:

    我正在尝试使用贝宝快速结账https www sandbox paypal com wsdl PayPalSvc wsdl https www sandbox paypal com wsdl PayPalSvc wsdl 当我打电话使用时
  • 在for循环中运行replace()方法?

    已经很晚了 我一直在尝试编写一个简单的脚本 将点云数据重命名为工作格式 我不知道我做错了什么 因为底部的代码工作正常 为什么for循环中的代码不起作用 它将其添加到列表中 但它只是没有被替换功能格式化 抱歉 我知道这不是调试器 但我真的很困
  • 如何使用 Gmail 中的标签来识别单个邮件而不是已由脚本处理的线程

    使用 google 邮件脚本 我尝试使用 API 将带有某些标签的新电子邮件上传到我们的 CRM 我无法检查邮件是否已上传 因此我必须在邮箱中为之前已处理过的邮件应用标签 不幸的是 谷歌脚本只允许您在线程级别添加或检查标签 由于新消息可以在
  • 使用 sqlplus 检索大型 clob 数据

    如何使用 sqlplus 将大 clob 数据从表中完全检索到标准输出 有一种方法可以使用特定于语言的数据库 API 来完全获得它 但是当我尝试纯粹使用 sqlplus 来获取它时 我遇到了几个问题 例如 输出缓冲区太小 最大 4000 字
  • Xamarin:应用程序未安装问题

    当我在 Android 移动设备上以调试模式安装应用程序时 它似乎已安装 但是 在签署应用程序并发布后 它并未安装在我的手机上 释放模式 它说 应用程序未安装 我尝试了一些方法但无法解决这个问题 我还用另一个密钥库进行了测试 但仍然无法安装
  • 将匿名侦听器与 C# 和垃圾收集中的事件分离

    假设我有一个名为 Dialog 的类 它扩展了 Form 对话框上有一个文本框和一个 确定 按钮 当用户单击 确定 时 文本框值将通过事件返回 public class Dialog Form public delegate void on
  • 命令替换中的 Heredoc:引号或括号不平衡时出错(bash 和 zsh)

    考虑以下用于打印单引号的混淆脚本 该脚本适用于ksh bin ksh echo cat lt