解决数组构造中的空格文件名问题

解决数组构造中的空格文件名问题

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

有关的:

相关内容