Shell 脚本 - 迭代空格分隔的单词/字符(在 zsh 中)

2024-05-01

我在弄清楚如何在 shell 脚本中迭代空格分隔的单词/字符时遇到一些麻烦。例如,我想迭代一个包含字母表中由空格分隔的字符的变量。

注意:即使字母表变量包含空格分隔的字符串而不是字符,结果也应该是相同的,即“aa bb cc ...”而不是“a b c ..”

我已经尝试了很多提供的替代方案:如何在bash中将一行分成由一个或多个空格分隔的单词? https://stackoverflow.com/questions/1975849/how-to-split-a-line-into-words-separated-by-one-or-more-spaces-in-bash

Example:

  local alphabet="a b c d e f g h i j k l m n o p q r s t u v w x y z"
  local index="0"
  for character in $alphabet; do
      index=$((++index))                                      
      echo "$index. $character"
      # Possibility to do some more stuff
  done 

预期/期望的输出:

1. a
2. b
3. c
and so on..

Result:

1. a b c d e f g h i j k l m n o p q r s t u v w x y z

附加测试(未成功):

  ####################################################################
  local alphabet="a b c d e f g h i j k l m n o p q r s t u v w x y z"
  local index="0"
  for character in ${alphabet[@]}; do
      index=$((++index))                                      
      echo "$index. $character"
      # Possibility to do some more stuff
  done 

  ####################################################################
  local alphabet="a b c d e f g h i j k l m n o p q r s t u v w x y z"                                            
  local alphabetArray=( ${alphabet} )                                                                             
  local index="0"                                                                                                 
  for character in "${alphabetArray[@]}"; do                                                                      
      index=$((++index))                                                                                          
      echo "$index. $character"                                                                                   
      # Possibility to do some more stuff                                                                                        
  done 

  ####################################################################
  local alphabet="a b c d e f g h i j k l m n o p q r s t u v w x y z"                                            
  local alphabetArray=( ${alphabet} )                                                                             
  local index="0"                                                                                                 
  for character in ${alphabetArray}; do                                                                           
      index=$((++index))                                                                                          
      echo "$index. $character"                                                                                   
      # Possibility to do some more stuff                                                                                        
  done

有人可以提供如何解决这个问题的解决方案(我更喜欢一个迭代字母表变量而不显式使用索引变量的解决方案,即 $alphabet[index] )?


感谢您的帮助。感谢您的反馈,我发现了该错误。

当我发布这个问题时,我认为这是无关紧要的,但我正在试验 .zshrc 文件中的函数。因此我使用(只是我的假设)zsh 解释器而不是sh 或bash 解释器。

通过意识到这可能是一个潜在的问题,我用谷歌搜索并发现了以下内容如何在 zsh 中一次一个单词地遍历字符串 https://stackoverflow.com/questions/23157613/how-to-iterate-through-string-one-word-at-a-time-in-zsh#23157823

所以我测试了以下内容并且它按预期工作:

  setopt shwordsplit                                                                                              
  local alphabet="a b c d e f g h i j k l m n o p q r s t u v w x y z"                                            
  local index="0"                                                                                                 
  for character in $alphabet; do                                                                                  
      index=$(($index+1))                                                                                         
      echo "$index. $character"                                                                                   
      # Possibility to do some more stuff                                                                                        
  done                                                                                                            
  unsetopt shwordsplit

NOTE:

index=$((++$index))
and/or
index=$(($index++))

在 zsh 中似乎没有像我预期的那样工作。

...我应该使用的小细节:

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

Shell 脚本 - 迭代空格分隔的单词/字符(在 zsh 中) 的相关文章

随机推荐

  • Android 为多个活动存储 Socket.io 对象

    我正在制作我的第一个基于 Socket io 的 Android 应用程序 套接字从 Web 服务发送和接收数据 应用程序中有许多屏幕用于不同的功能 我如何在这些不同的活动中使用相同的套接字连接 我尝试在 Application 类中设置和
  • 常量正确性和硬件写入

    假设我有以下成员函数 void CFoo regWrite int addr int data reg write addr data driver call to e g write a firmware register 显然 调用此函
  • 附加到 group_vars 中的 Ansible 字典而不使用 hash_behaviour = merge

    我想定义一个字典变量 各个主机组可以将自己的密钥添加到其中在group vars中 不使用set fact 例如 像这样的东西 group vars ftp servers yml important ports ftp 21 group
  • 不可编辑的文本字段

    我是新来的YII 我想知道文本字段是否YII可以设为不可编辑 如果是的话有人可以回答吗 我按照下面的方法 这是行不通的 Use readonly instead http www w3 org TR html401 interact for
  • Python脚本仅在Docker中产生僵尸进程

    我有相当复杂的设置 Luigi https github com spotify luigi https github com spotify luigi https github com kennethreitz requests htm
  • 如何从 ViewController 中的 NSOutlineView 捕获 doubleClick 事件?

    我正在尝试从 NSOutlineView 捕获 doubleClick 事件并将其传递给 ViewController 我的想法是捕获 doubleClick 事件并从 OutlineView 中获取所选行 到目前为止我所做的是子类化 NS
  • 如何使用 CSS 在 HTML H2 之前添加数字?

    我正在努力创造一个好看的H2HTML 和 CSS 中的标题将允许我在实际标题文本之前有一个格式良好的数字 如下图所示 图像中的示例使用如下所示的 CSS 代码 效果很好 只是我无法在 HTML 中设置橙色圆圈中的数字值 h2 before
  • ActiveX 组件无法创建对象

    我收到错误 ActiveX 组件无法创建对象 实际上 我有业务逻辑所在的 VB6 DLL 并且我在 VB NET 应用程序中调用该 DLL 函数 所有 DLL 都依赖于其他 DLL 我从其中一个 DLL 中收到错误 有任何想法吗 通常该错误
  • Eclipse RCP View 在应用程序启动时不显示

    我现在面临这个问题大约一个小时 我不知道我做错了什么 您看到我的plugin xml 代码中的错误了吗
  • (不再寻求答案)消息框内的Python输入框

    有什么方法可以在使用 ctypes 库打开的消息框内输入框吗 到目前为止我有 import ctypes messageBox ctypes windll user32 MessageBoxA title Title text Messag
  • Java方法关键字“final”及其使用

    当我创建复杂类型层次结构 多个级别 每个级别几种类型 时 我喜欢使用final实现某些接口声明的方法上的关键字 一个例子 interface Garble int zork interface Gnarf extends Garble Th
  • 为什么这个标题图形不随世界更新

    对于以下内容 我很高兴组合框默认为世界 但当收音机被点击时 我也希望标题移回 世界 我该怎么做 我有这个笨蛋 http plnkr co edit 9FXJXVqLZLPFdDrmVJez p preview http plnkr co e
  • Java+Spring:SEVERE Servletservice

    我不知道我出了什么问题listContacts在控制器中map put contactList contactService listContact 有人可以帮助我吗 严重 路径 test 上下文中 servlet dispatcher 的
  • 从字符串“”到类型“布尔”的转换无效

    我在 ASP NET 登录表单的标题中收到错误消息 有谁知道我该如何解决它 非常感谢帮助 Protected Sub Button1 Click ByVal sender As Object ByVal e As EventArgs Han
  • 如何获取特定名称的行索引号?

    如何确定与特定行名称对应的行索引号 我有一个行名称向量 我想使用它们来获取矩阵中相应行索引的向量 I tried row and as integer rownames matrix object 但似乎都不起作用 此外which 你可以看
  • 动态获取当前LDAP路径

    我正在使用 C 和 NET Framework 4 0 开发一个库 我想检索所有活动目录用户 它效果很好 但我的问题是 如果我在另一个域上运行我的程序 我必须更改此设置 private static string ldapPath LDAP
  • 使用 Knockout 使用多个字段/列和控件来过滤 ViewModel 数据

    我是 KnockoutJS 的新手 但到目前为止我很喜欢它 我想做的是使用表单上的多个字段 列和控件来过滤我的视图模型的数据 但我不知道该怎么做 让我 希望 进一步解释一下 我有一个 viewmodel 可观察的数据数组 其中填充了来自后端
  • Visual Studio 2010 和 Web 部署项目 (wdproj 2008)

    我在 vs2008 解决方案中有几个 wdprojects Web 部署 2008 当我安装 vs2010 RC 时 我的 wdprojects 都不会打开 我该怎么做才能让它发挥作用 Visual Studio 2010 Web 部署项目
  • 如何在Unity中使用MediaCapture类访问相机预览帧?

    我正在尝试在 Unity 应用程序的脚本中访问 Hololens 的相机预览帧 但遇到一些问题 我想使用 MediaCapture 类访问相机预览 我知道它可以在 UWP 应用程序中实现 但我想在 Unity 中实现 在 UWP 应用程序中
  • Shell 脚本 - 迭代空格分隔的单词/字符(在 zsh 中)

    我在弄清楚如何在 shell 脚本中迭代空格分隔的单词 字符时遇到一些麻烦 例如 我想迭代一个包含字母表中由空格分隔的字符的变量 注意 即使字母表变量包含空格分隔的字符串而不是字符 结果也应该是相同的 即 aa bb cc 而不是 a b