2017-03-05 4 views
1

glob로 키로부터 파생 된 파일 이름으로 Bash에서 연관 배열을 만들고 싶습니다. 여기에 내가 뭐하는 거지입니다 :glob 출력으로 Bash 연관 배열 만들기

내가 같은 일을하고 좀 더 간단한 방법이 있다면 어느 정도 우리가 정상적인 배열이 방법으로 초기화하는 방법처럼,보고 궁금
declare -A file_hash 
for file in *; do 
    file_hash+=([$file]=1) 
done 

:

file_array=(*) 

을 내가 SO에 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=(*) 작품 더 이상, 더에 대한 바로 가기로 등 *, [], ? 같은 쉘 특별히, 즉 공백 처리 할 수 ​​있습니다 문자가 포함 된 파일 이름 (줄 바꿈 특히)와 글로브 메타 문자를 처리하지 명시적인 형식

인덱스 0, 1, ...은 glob 확장의 파일 시퀀스에서 유추 할 수 있기 때문에. 연관 배열에서는 이러한 가정을 할 수 없으며 키와 값을 명시 적으로 지정해야합니다.