我想在Bash中创建一个关联数组,文件名从glob派生为键。这就是我在做的事情:
declare -A file_hash
for file in *; do
file_hash+=([$file]=1)
done
我很想知道是否有更简单的方法来做同样的事情,有点像我们用这种方式初始化普通数组:
file_array=(*)
我从another帖子上获得的一个想法是:
file_array=(*)
declare -A file_hash=( $(echo ${file_array[@]} | sed 's/[^ ]*/[&]=&/g') )
这是最好的方法吗?
答案 0 :(得分:2)
你的循环是正确的方法。任何其他风险都无法正确处理包含shell可能特别处理的字符的文件名,即空格(特别是换行符)和全球元字符,如*
,[]
,?
等。
file_array=(*)
可作为更长,更明确的形式的快捷方式
file_array=([0]=file1 [1]=file2 ...)
因为索引0,1,...可以从glob扩展的文件序列中推断出来。使用关联数组,您不能进行任何此类假设,并且必须明确给出键和值。