2017-03-05 37 views
1

我想在Bash中創建一個關聯數組,其中的文件名是從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')) 

是,最好的方法是什麼?

+2

受到echo方法的啓發,這在某些測試中工作正常,但需要eval:'declare -A filehash; eval $(printf'filehash + =([「%s」] = 1);'* .txt)' –

回答

2

您的循環是執行此操作的正確方法。還有什麼風險沒有正確處理包含字符的文件名,該外殼可以特別對待,即空白(和換行符尤其是)和水珠元字符像*[]?

file_array=(*)作品的更長,更快捷明確的形式

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

因爲指數0,1,...可以從文件從水珠擴展序列推斷。對於關聯數組,您不能進行任何這樣的假設,並且必須明確給出鍵和值。