Bash脚本将目录中的文件读入数组

Bash脚本将目录中的文件读入数组,bash,Bash,在bash中将文件读入数组时遇到问题 我注意到人们不推荐使用ls-1选项。 有没有办法解决这个问题?获取文件列表最可靠的方法是使用shell通配符: # First set bash option to avoid # unmatched patterns expand as result values shopt -s nullglob # Then store matching file names into array filearray=( * ) 如果需要在当前目录以外的其他位置获取

在bash中将文件读入数组时遇到问题

我注意到人们不推荐使用ls-1选项。
有没有办法解决这个问题?

获取文件列表最可靠的方法是使用shell通配符:

# First set bash option to avoid
# unmatched patterns expand as result values
shopt -s nullglob
# Then store matching file names into array
filearray=( * )
如果需要在当前目录以外的其他位置获取文件,请使用:

filearray=( "$dir"/* )
请注意,如果目录路径包含空格或其他特殊字符,则应使用双引号,但不能使用
*
,或者不会将其扩展到文件列表中。此外,这将用文件路径填充数组,而不仅仅是名称(例如,如果
$dir
是“path/to/directory”,则filearray将包含“path/to/directory/file1”、“path/to/directory/file2”等)。如果只需要文件名,可以使用以下命令修剪路径前缀:

filearray=( "$dir"/* )
filearray=( "${filearray[@]##*/}" )

如果需要在子目录中包含文件,事情会变得更复杂一些;请参阅。

您能否进一步澄清一下您想做什么?ls命令用于列出一个目录,而不是读取阵列目录中可能重复的文件。因此,第一个文件数组=(*)这将把所有文件都放入数组中,每个文件都有自己的索引?@sinful15:Yes。顺便说一句,一定要把对文件名的引用放在双引号中,就像一个文件的
“${filearray[1]}”
或者完整列表的
“${filearray[@]}”
一样。很棒的答案,帮了大忙!谢谢3小时搜索如何使用vars作为目录路径。谢谢!