arrays - 如何将 find 的结果存储在 bash 数组中,以将结果用作 bash 脚本中的文件路径?
问题描述
在 bash 数组中使用以下命令时,它会丢失数组元素的行分隔。
array=$(find "${PWD%/*}" -name '*.dmg')
如果我重定向 find 命令的路径,而不将其存储在变量中,而是将其存储到文本文件中,它会给出所需的结果。
find "${PWD%/*}" -name '*.dmg' > Out.txt
但我想将结果用作 Bash 中的变量并循环遍历它。在这种情况下,find 命令应该返回一个数组,其中包含一个目录中所有 .dmg 文件的路径。我想用hdiutil
mount 命令遍历这个数组,以便挂载.dmg
目录中的所有文件。
解决方案
您可以使用mapfile
将找到的文件安全地传输到数组中。
#!/usr/bin/env bash
declare -a array
mapfile -d '' array < <(find "${PWD%/*}" -name '*.dmg' -print0 2>/dev/null)
find -print0
选项产生空分隔的字符串,因此文件名中的空格、制表符和回车被安全地保留。
mapfile -d '' array
使用空分隔符读取stdin
以填充array
< <(commands group)
将命令组的输出注入到stdin
其他命令组中。
结果是, 的输出find
被映射到array
。
mapfile
,这是另一种填充方式array
:
#!/usr/bin/env/bash
declare -a array
while read -r -d ''; do
array+=("$REPLY")
done < <(find "${PWD%/*}" -name '*.dmg' -print0 2>/dev/null)
推荐阅读
- vue.js - Vue组件不显示嵌套的div
- sql-server - 关键字“AS”附近的语法不正确。在 SQL Server 中
- java - parseUnsignedInt - 这个方法有什么问题?
- json - 带有嵌套 JSON 的 JQ
- c++ - 在 constexpr 构造函数中获取特殊的指针值(类似于“第二个”nullptr)
- crystal-reports - 停止正在运行的程序会导致 IDE 使用 Crystal Report XI Chart Report 挂起
- c# - .NET Core 是否支持 Web 套接字?抛出“System.Net.WebSockets.WebSocketException 异常
- android - 以编程方式在 Android 中运行命令管道
- haskell - 基于 Haskell 中的字符串映射证明打印函数的穷举性
- go - 在 Go 中使用输入和输出通道