我正在使用该命令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
,该模式*
还会匹配以点开头的文件。
有关的: