我无法在bash中将文件读入数组。
我注意到人们不建议使用ls -1选项。 有办法解决这个问题吗?
答案 0 :(得分: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 /”到/ directory / file2“等)。如果只需要文件名,可以使用以下方法修剪路径前缀:
filearray=( "$dir"/* )
filearray=( "${filearray[@]##*/}" )
如果你需要在子目录中包含文件,事情会变得复杂一些;见this previous answer。