나는 이 명령을 사용하여 files=( $(ls "/path/wanted") )
디렉토리의 모든 파일 이름을 배열로 저장합니다. 그러나 공백 문자가 포함된 파일 이름은 여러 배열 항목을 생성합니다.
그것을 알아내려면:
ls /path/wanted something.txt spaced name
${#files[@]} 3
전체 파일 이름을 각 배열 위치에 어떻게 매핑합니까?
답변1
shopt -s nullglob # enable nullglob
#shopt -s dotglob # enable dotglob too if desired
cd /path/wanted
files=( * )
cd -
# do something with "${files[@]}" or "${#files[@]}"
shopt -u nullglob # disable nullglob
#shopt -u dotglob # disable dotglob if enabled
비활성화된 경우(기본값) 디렉터리에 파일이 없으면 nullglob
배열에는 glob 패턴을 포함하는 요소가 포함됩니다. 활성화 *
되면 nullglob
배열이 비어 있게 됩니다.
동일하게 적용됩니다 dotglob
. 비활성화된 경우 도트 파일은 유사한 패턴과 명시적으로 일치해야 합니다 .[^.]*
([^.]
아니요현재 디렉터리 .
와 상위 디렉터리와 일치합니다 ..
.) 활성화되면 dotglob
이 패턴은 *
점으로 시작하는 파일과도 일치합니다.
관련된: