arrays - 以文件列表为值的关联数组…
问题描述
我在使用 Bash 的关联数组时遇到了一些问题:我正在寻找一种解决方案,将带有文件名的数组分配给关联数组。
它应该看起来像:
/Applications/Setup.app => ([0] = "/Applications/Setup.app/IDStore@2x.png"
[1] = "/Applications/Setup.app/IDMessages@2x.png"
[2] = "/Applications/Setup.app/IDMusic New@2x.png")
声明字典/哈希表/关联数组不是问题:
declare -A Dictionary
要获取我正在使用“readarray”的键,并结合“find”:
readarray -d '' Applications < <(find "/Applications" -name "*.app" -print0)
如果目录的名称中有空格,那不是问题。现在我需要在应用程序的目录中找到 PNG 文件:
if [ ${#Applications[*]} -gt 0 ]; then
for App in "${Applications[@]}"; do
readarray -d '' Files < <(find "$App" -iname "*.png" -type f -print0)
for File in "${Files[@]}"; do
Dictionary["$App"]+="$File"
done
done
fi
我不明白的问题是,如何将第二个“查找”的结果作为文件列表添加到声明的关联数组中?如果我使用 Delimiter ' ' 设置 readarray 一些包含空格的文件被破坏。
下一个问题是如何获取 for-Loop 中的值?我也用 readarray 试过这个,但这不适用于名称中带有空格的文件。
for Key in "${!Dictionary[@]}"; do
readarray -d ' ' Values <<< "${Dictionary[$Key]}"
for Value in "${Values[@]}"; do
echo "$Value"
done
done
如果我运行上面的脚本,这就是我得到的:
/Applications/Setup.app/IDStore@2x.png/Applications/Setup.app/IDMessages@2x.png/Applications/Setup.app/IDMusic
New@2x.png
但我想要这个:
/Applications/Setup.app/IDStore@2x.png
/Applications/Setup.app/IDMessages@2x.png
/Applications/Setup.app/IDMusic New@2x.png
是否有机会使用 Bash 5.0.3 进行这项工作?
目标是在没有 awk / grep / sed 的情况下使用大多数功能,因此它使用 Bash 的内置命令运行。
解决方案
数组数组,考虑这种方法:
[[ ${Applications[@]} ]] && {
for i in "${!Applications[@]}"; do
readarray -d '' "Files$i" < <(find "${Applications[$i]}" -iname "*.png" -type f -print0)
Dictionary["${Applications[$i]}"]="Files$i"
done
}
然后检索值使用这个:
for key in "${!Dictionary[@]}"; do
val="${Dictionary[$key]}[@]"
echo "$key: ${!val}"
done
并在这里检查
推荐阅读
- javascript - Vanilla JS 闹钟:范围和增量问题
- json - Flutter:从嵌套的 json null 中获取数据
- swift - 使用 CryptoKit 的大文件的 SHA-256
- linux - 如何在 bash 中检测不成功的 git 身份验证?
- php - 第 9 行 D:\wamp\www\tp\resume.php 中未定义的变量登录
- python - PyCharm - 我如何调试(如在 Jupyter Notebook 中)而不必每次修改代码时都重新运行完整的脚本?
- java - Java 在框架外单击(使用机器人)
- python - 如何在 Pillow 中获取照片的总尺寸?
- docker - 无法从 Mosquitto 泊坞窗外部连接
- php - 在 WooCommerce 中自动生成简单或可变的产品描述