使用glob输出

时间:2017-03-05 20:37:15

标签: bash associative-array glob

我想在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') )

这是最好的方法吗?

1 个答案:

答案 0 :(得分:2)

你的循环是正确的方法。任何其他风险都无法正确处理包含shell可能特别处理的字符的文件名,即空格(特别是换行符)和全球元字符,如*[]?等。

file_array=(*)可作为更长,更明确的形式的快捷方式

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

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