zsh 中的 IFS 行为与 bash 不同

2023-11-27

foo() {
    local lines=$(ls -l)
    local IFS=$'\n'
    for line in $lines; do
        echo $line
    done
}

在 zsh 中,循环只执行一次,因为 for 的输出ls -l命令不会被新行分割,整个文本块都会传递到 $line 中。 但在 bash 中,可以按预期工作。如何在两个 shell 中具有完全相同的行为?

我不是在寻找循环“ls”输出的替代解决方案。只是想了解为什么它在 zsh 中不起作用但在 bash 中工作得很好。除了“ls”命令之外,还可以使用其他任何命令。例如“ps-a”。行为是一样的。输出不按行分割。

Thanks!


ZSH 默认情况下不分割单词(像其他 shell 一样):

foo() {
    local lines=$(ls -l)

    local IFS=$'\n'
    if [ $ZSH_VERSION ]; then
      setopt sh_word_split
    fi

    for line in $lines; do
        echo line: $line
    done
}

foo

致谢@chris-johnsen他的回答。我支持他更好地使用数组的论点(如果可能):

local lines=("$(ls -l)")

其他选项是(仅限 ZSH):

  • local lines=("${(f)$(ls -l)}"), where (f)是简写(ps:\n:)
  • for line in ${=lines}; do(注意添加的等号)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

zsh 中的 IFS 行为与 bash 不同 的相关文章

随机推荐

  • try catch 块的成本是多少?

    好多少是 if condition try something catch SomeEx ex 而不是这个 try if condition something catch SomeEx ex 当我进入 try 块时 JVM 实际上会做什么
  • 动画按钮允许用户交互不起作用

    我在 NSObject 类的代码中创建了一个 UIbutton 它控制 UIViewController 类中的游戏 该按钮在游戏的大部分时间都工作正常 但在某个时刻我希望按钮淡入 淡出 一旦淡入 淡出开始动画 按钮就不再具有交互性 我已经
  • 从 json 创建 DynamoDB 表

    我想知道是否可以从表定义 json 本身创建 dynamodb 表 我研究了 aws cli 工具 但找不到任何方法来执行此操作 只是想知道是否可能 aws dynamodb create table file tabledenifisio
  • 如何将 mySql SQL 脚本转换为 MS SQL 脚本?

    我必须将客户 MySql 数据库架构 数据迁移到 MS SQL SERVER 2008 最后我收到了 70 Mb SQL 文件 其中包含与 MSSQL 不兼容的 mySQL 方言 DROP TABLE IF EXISTS kladr CRE
  • Facebook 登录与 CSRF 状态令牌不匹配的问题

    我做了一些搜索 但没有找到与我的问题相关的任何内容 我目前正在尝试对我的网站实施 Facebook 登录 但由于 htaccess mod 重写 URL 我在登录身份验证方面遇到了问题 该代码工作完美 如果我在没有 mod 重写规则的情况下
  • c从 R 中的字符串绑定动态列名

    我想将一列绑定到数据框 并使用从字符串动态分配的列名称 y attribute Survived cbind test data y attribute NA 这会导致新列添加为y attribute而不是所需的Survived属性以字符串
  • Mockito 空指针异常

    我遵循了 hoaz 的建议 但是 我遇到了空指针异常 RunWith MockitoJUnitRunner class public class GeneralConfigServiceImplTest InjectMocks privat
  • Perl 可以“静态”解析吗?

    An 文章名为 Perl 无法解析 形式化证明 正在巡视 那么 Perl 是否在 运行时 或 编 译时 决定其解析代码的含义 在我读过的一些讨论中 我的印象是这些论点源于不精确的术语 所以请尝试在答案中定义您的技术术语 我故意没有定义 运行
  • 如何将列表中的随机值分配给 pandas 数据框中的列?

    我正在 Bigquery 中使用 Python 并且有一个大型数据帧 df 大约 700 万行 我还有一个列表 lst 包含一些日期 例如给定月份的所有日期 我正在尝试在 df 中创建一个附加列 random day 并使用每行中 lst
  • HTTPS 到 HTTPS 重定向 Nginx

    如何将一个 HTTPS 重定向到另一个 HTTPS 我只有一个域的一个 SSL 证书 例如 如何重定向https example org to https example com 我已经尝试搜索谷歌和其他论坛 但没有发现任何效果 这非常容易
  • openapi 3.0 有效的最小值和最大值

    我有下面的模式定义来表示commission amount在我的 openapi 合同中 commissionAmount type number minimum 99999 99 maximum 99999 99 生成的代码 Valid
  • 我可以从实例访问类变量吗?

    我有这门课 class ReallyLongClassName static var 5 def instance method self ReallyLongClassName static var 1 有没有办法使用 self 变量访问
  • 使用 javascript 保持事件

    我真的很想知道当您点击 在移动设备上 或单击 在桌面设备上 表单提交 锚点 等时是否有任何方法可以执行功能 并保持一段时间而不使用 jQuery function clicked set some kind of timer or so f
  • 对分组中的“汇总”进行排序

    我发现与 group by 一起使用的 with rollup 选项非常有用 但它不适用于 order by 子句 有什么办法可以按照我想要的方式订购并计算小计吗 CREATE TABLE mygroup id int 11 default
  • 如何在 MATLAB 中一步加载 100 个具有相似名称和/或字符串的文件?

    我的目录中有 100 个 ASCII 文件 全部命名如下 int 001 ASCint 002 ASCint 003 ASC int 099 ASCint 100 ASC 我必须使用 importdata 将它们全部导入到 MATLAB 中
  • 防范 CSRF 和 XSS(散列 + 加密)

    安全 如今 如果没有通过开发人员使用的框架或开发人员自己编程适当的安全性 任何应用程序都无法在互联网上生存 我目前正在开发一个 RESTful API 以使用 Bearer 令牌身份验证进行工作 但一直在阅读有关 XSS 和 CSRF 攻击
  • 在 Windows 上安装 Python Pillow

    我对 Python 相当陌生 并尝试在 Windows 7 上安装 Pillow 包 我从以下位置下载并运行了 MS Windows 安装程序 Pillow 2 2 1 win amd64 py3 3 exehere 它看起来安装得很好 如
  • 如何向 DataReader 添加列

    我的目标是从数据源检索数据 向其中添加一些元数据并将其插入到另一个目标 目标的架构比源多四列 计算列 我在用SQL批量复制 这需要一个具有所有列 包括计算出的 4 列 的阅读器 有没有办法手动将列添加到 DataReader 中 或者如果不
  • 将 MVC 迷你分析器计时纳入异步任务

    我在页面内有一个长时间运行的 SQL 查询 我通过使用异步任务加速了该查询 using System Threading Tasks var asyncTask new Task
  • zsh 中的 IFS 行为与 bash 不同

    foo local lines ls l local IFS n for line in lines do echo line done 在 zsh 中 循环只执行一次 因为 for 的输出ls l命令不会被新行分割 整个文本块都会传递到