Bash:如何选择数组中的元素

2023-12-10

我有一个包含子目录和文件的数组:

~$ array=(elem1/a elem1/b elem2/a elem2/b)

我需要选择子目录中的所有文件(及其子目录)elem1.

我尝试过for循环和case:

for element in "${array[@]}"; do
  case $element in
    elem1*)
    # action I need to perform on this element
      echo "This is $element"
    ;;
  esac
done

我想使用一些 glob 来获取所需的元素列表,其方式与此类似(从数组元素中减去子字符串):

~$ echo ${array[@]%/a}
elem1 elem1/b elem2 elem2/b

我主要担心的是,我不应该对我正在搜索的字符串进行硬编码,因为我不知道它的内容 - 在这个脚本的最终版本中,我从另一个数组中获取它们。


我的答案将数组的每个元素打印在不同的行中,然后过滤您感兴趣的元素(grep)并将它们放入一个新数组中

newarray=( $(printf "%s\n" "${array[@]}" | grep ^elem/) )

唯一的问题是数组的元素(子目录和文件名)可能包含EOL或空白字符。

Bonus

如果你的元素包含EOL或空白字符,您应该使用NUL (\000) 字符和grep -zZ去处理它;但随后您需要更多代码将这些 NULL 字符字符串转换为 bash 可以使用的内容——当 bash 找到 NULL 字符时,它会停止读取。

在这个例子中我使用awk,处理 NUL 字符没有问题,并且不需要使用grep:

 eval newarray=( $(printf "%s\000" "${A[@]}" |
                   awk 'BEGIN { FS="\000" }

                        /^elem\// {
                                    gsub("\042","\\\042")
                                    printf("[" NR-1 "]=\042%s\042 ",$0)
                                  }'
                   )
                )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash:如何选择数组中的元素 的相关文章

  • MongoDB 查询 IN 对象数组

    我在检索两个集合之间的信息时遇到问题 第一个集合存储员工信息 id ObjectId 4f9643967f8b9a3f0a00005a birth date 1963 09 09 departments departments id Obj
  • 在 bash 中快速引用 stdout(即上一个命令的输出)?

    有没有办法快速 例如通过键盘快捷键等 引用写入到 stdout 的上一个命令的输出 例如 如果我这样做 which rails 它回来了 usr local bin rails然后我想在 textmate 中打开该文件 我可以像这样重新输入
  • 在 Bash 中拆分 csv 文件中的列

    我想从 csv 文件的第二列中提取值并将提取的值存储在新列中 我的数据集示例 page name post id page id A 86680728811 272953252761568 86680728811 A 86680728811
  • 如何编写 bash 函数来包装另一个命令?

    我正在尝试编写一个函数包装器mysql command If my cnf存在于 pwd 中 我想自动附加 defaults file my cnf到命令 这就是我正在尝试的 function mysql if e my cnf then
  • 如何连接以逗号分隔的命名范围的返回值

    我花了几个小时试图找出如何连接命名范围中的返回值 但结果是 运行时错误 32 类型不匹配 作为一个新手 我仍在与数组作斗争 所以也许我忽略了一些细节 谢谢你帮助我 示例 B1 苯 B2 柴油 B3 混合动力 gt E1 汽油 E2 柴油 E
  • 内在数组访问比 std::vector 访问快得多——黑魔法?

    我已经设置了一个测试程序来将数组访问性能与 std vector 的访问性能进行比较 我发现了几个类似的问题 但似乎没有一个问题能解决我的具体问题 一段时间以来 我一直在摸不着头脑 为什么数组访问似乎比向量访问快 6 倍 而我过去读到它们应
  • 将正数放在负数之前

    所以我有在互联网上找到的这段代码 它采用负数和正数数组并重新排列数组 以便所有负数都在正数之前 但每个数字出现的位置必须保持相同 例如 如果我有 2 5 9 在有组织的数组中 2仍然必须是first的数量negative那些和 9必须是se
  • 有没有办法让 Linux CLI IO 重定向持久化?

    我有多个管道命令 如下所示 find options grep options xargs grep options 它们中的每一个都可能产生我不感兴趣的错误 权限错误 文件名空格错误等 因此 我想将所有错误重定向到 dev null 我知
  • 通过 Bash 命令在文本文件中查找并替换

    例如 对给定输入字符串进行查找和替换的最简单方法是什么abc 并替换为另一个字符串 例如XYZ在文件中 tmp file txt 我正在编写一个应用程序并使用 IronPython 通过 SSH 执行命令 但我不太了解 Unix 也不知道要
  • bash 如何识别链接?

    在捕获 href 链接的 bash 脚本中 bash 如何知道 TEXT 是链接而不是典型的字符串 为什么最后当 TEXT www google com 时 TEXT 仍然是一个链接 你能用一个文件做到这一点吗 例如 有一个运行脚本的 点击
  • 如何垂直打印数组中的字符串元素? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个数组 我想垂直打印每个元素 例如 myArr abc def ghi 输出应该是 a d g b e h c f
  • shell中基于正则表达式的颜色突出显示输出

    我想知道是否可以用颜色突出显示与某些字符串匹配的 shell 命令的输出 例如 如果我运行 myCommand 输出如下 gt myCommand DEBUG foo bar INFO bla bla ERROR yak yak 我希望所有
  • PDF:在现有 PDF 文件中插入一行文本

    我有一个 PDF 文件 我希望在所有页面 前两页除外 的页脚上添加一行纯文本 不是徽标或类似内容 有谁有一个如何做到这一点的例子 用任何语言 Update 原始 PDF 是用 Scribus 制作的 我可以完全控制它 因此 如果更容易进行查
  • 使用 BASH 和 AWK 创建 HTML 表

    我在创建 html 表来显示文本文件中的统计信息时遇到问题 我确信有 100 种方法可以做得更好 但这里是 以下脚本中的注释显示了输出 bin bash function getapistats curl s http api exampl
  • 无法让 ASCII 艺术回显到控制台

    我是 Bash 脚本新手 这让我感到困惑 我正在将 ASCII 艺术添加到项目中 但似乎无法弄清楚如何转义某些字符 有人可以帮我让下面的代码正常工作吗 每当我尝试添加斜杠作为转义字符来修复错误时 斜杠也会在执行时打印到控制台 这破坏了形象
  • cat/Xargs/命令 VS for/bash/命令

    Linux 101 Hacks 一书的第 38 页建议 cat url list txt xargs wget c 我通常这样做 for i in cat url list txt do wget c i done 除了长度之外 还有什么东
  • javaScript从单个值数组返回一个新的成对值数组[重复]

    这个问题在这里已经有答案了 可能的重复 将数组分割成块 https stackoverflow com questions 8495687 split array into chunks 我正在尝试将值数组转换为新的配对值数组 例如我需要转
  • bash.sh 运行 cron 的权限被拒绝

    如何在这里使用 bash 脚本运行 cron 我做了如下操作 这里有错误 我想知道如何在 ubuntu 中做到这一点 我现在对它感到震惊 bash sh 文件 bin bash cd var www Controller usr bin p
  • 获取 Blob 图像并将该图像转换为 Bitmap 图像

    我正在从数据库中获取 blob 格式的图像 我想将其转换为位图图像 我用来将位图转换为 Blob 的代码放在下面 但是请告诉我如何反转它 ByteArrayOutputStream boas new ByteArrayOutputStrea
  • Swift 中带有数组的 For-In 循环中迭代器元素的可变性

    我在 Swift 3 0 中有一些代码 就像这样尝试更新元素数组中的属性 for point in listOfPoints var pointInFrame Float Float point position x sensorIncom

随机推荐