命令替换中的 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) 的相关文章

  • 如何显示 zsh 函数定义(如 bash“type myfunc”)?

    如何在 zsh 中显示函数的定义 type foo没有给出定义 在bash中 bash function foo echo hello bash foo hello bash type foo foo is a function foo e
  • 如何将参数传递给java bash脚本? [复制]

    这个问题在这里已经有答案了 我有一个简单的 bash 脚本来运行我的 java 程序 就这个 run sh bin sh java jar target my jar arch jar 我想将参数传递给这个脚本 该脚本必须将它们传递给jav
  • 如何使用 bash 显示具有两个子文件夹的文件夹?

    我通过 Cygwin 使用 bash 我有一个大文件夹 a 有很多子文件夹 b 这些子文件夹各有一个或两个子文件夹 c 我想找到所有有两个子文件夹 c 的子文件夹 b 并输出它们 结构如下 a b1 c1 b2 c1 c2 b3 c1 c2
  • bash 变量中的 Linux 鞭尾/对话框参数错误

    有人可以解释为什么下面的代码不起作用吗 我要疯狂地想找出答案 bin bash TEST M1 1 wire Interface ON echo TEST RESULT dialog title Config Modules State c
  • 使用 sed 删除非字母数字字符

    我正在尝试验证一些输入以删除一组字符 只允许使用字母数字字符加 句点 下划线 连字符 我测试了正则表达式 w here http gskinner com RegExr http gskinner com RegExr 它与我想要删除的内容
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • 如何删除最后一次出现模式后的所有行?

    我想删除最后一次出现模式之后的所有行 除了模式本身 file txt honor apple redmi nokia apple samsung lg htc file txt 我想要什么 honor apple redmi nokia a
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • 仅当重复行与模式匹配时才删除它们

    这个问题 https stackoverflow com questions 1444406 how can i delete duplicate lines in a file in unix有一个很好的答案说你可以使用awk seen
  • 从 Amazon S3 存储桶下载文件的脚本

    尝试编写脚本以从 Amazon S3 存储桶下载文件 cURL 网站上的示例遇到问题 下面的脚本产生 我们计算的请求签名与您的签名不匹配 假如 检查您的密钥和签名方法 感谢任何帮助 bin sh file filename php buck
  • 有一种简单的方法可以忽略时间戳来区分日志文件吗?

    我需要比较两个日志文件 但忽略每行的时间戳部分 确切地说是前 12 个字符 有没有一个好的工具 或者一个聪明的 awk 命令 可以帮助我 根据您使用的 shell 您可以改变方法 Blair https stackoverflow com
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • Mongodb shell mongo:通常只允许每个套接字地址(协议/网络地址/端口)使用一次。对于套接字:0.0.0.0:27017

    前两天还好好的 现在mongod不起作用 甚至echo ps A grep mongo没有打印任何内容 但它警告错误 每个套接字地址只有一种用途 怎么杀掉它 我也尝试过不同的随机端口 他们怎么可能也失败呢 D mongodb win32 x
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • 将文件从不同目录复制到公共目录

    我有很多目录 其中包含 c文件 我想复制全部 c使用 shell 脚本将不同目录中的文件复制到单个目录 find name c exec cp t tmp 启动当前目录中的所有项目 递归 获取名称结尾的项目 c 将这些项目复制到 tmp 如
  • 如何制作一个 bash 脚本来同时创建 40 个程序实例?

    我是新来的bash and Linux 我编写了一个程序 我想创建多个同时实例 现在 我通过打开 10 个新终端 然后运行该程序 10 次 我运行的命令是php home calculatedata php 使用 bash 脚本执行此操作的
  • Pure Bash 替换捕获组

    我有这个示例字符串 test string 13A6 该字符 数字可以是从 0 到 9 以及从 A 到 F 我想要这个输出 1 3 A 6 我有这个工作 result echo test string sed s g 我想在没有 sed 的
  • 如何在 shell 脚本中操作 $PATH 元素?

    有没有一种惯用的方法从类似 PATH 的 shell 变量中删除元素 这就是我想要的 PATH home joe bin usr local bin usr bin bin path to app bin and remove or rep
  • 如何判断 Bash 中是否存在文件?

    这会检查文件是否存在 bin bash FILE 1 if f FILE then echo File FILE exists else echo File FILE does not exist fi 我如何只检查文件是否存在not ex
  • 对目录中的所有文件执行命令

    有人可以提供执行以下操作的代码 假设有一个文件目录 所有这些文件都需要通过程序运行 该程序将结果输出到标准输出 我需要一个脚本 该脚本将进入一个目录 对每个文件执行命令 并将输出连接到一个大输出文件中 例如 要在 1 个文件上运行命令 cm

随机推荐

  • 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