3

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

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

4

1 回答 1

16

获取文件列表最可靠的方法是使用 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” “, ETC)。如果只需要文件名,可以使用以下命令修剪路径前缀:

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

如果您需要在子目录中包含文件,事情会变得有点复杂;看到这个以前的答案

于 2013-03-23T00:45:22.190 回答