创建具有 glob 输出的 Bash 关联数组

Creating a Bash associative array with glob output

我想在 Bash 中创建一个关联数组,使用从 glob 派生的文件名作为键。这是我正在做的事情:

declare -A file_hash
for file in *; do
  file_hash+=([$file]=1)
done

我很好奇是否有更直接的方法来做同样的事情,有点像我们这样初始化一个普通数组:

file_array=(*)

我从 another post 上得到的一个想法是:

file_array=(*)
declare -A file_hash=( $(echo ${file_array[@]} | sed 's/[^ ]*/[&]=&/g') )

这是最好的方法吗?

您的循环是执行此操作的正确方法。任何其他风险都可能无法正确处理包含 shell 可能特殊处理的字符的文件名,即空格(尤其是换行符)和 glob 元字符,如 *[]?、等等

file_array=(*) 用作更长、更明确形式的快捷方式

file_array=([0]=file1 [1]=file2 ...)

因为索引 0、1、... 可以从 glob 扩展的文件序列中推断出来。使用关联数组,您不能做出任何此类假设,并且必须明确给出键和值。