如何将目录中的特定文件放入bash中的数组中?

Naw*_*que 7 bash filenames wildcards

假设我有一个目录,在该目录下有 3 个文件:file1.txt、file2.txt 和 file3.txt。

现在如何用这些文件名填充数组(我只知道所有文件都有特定的前缀,即文件,文件后可以是 1,2,3 等。

jas*_*yan 8

来自 Greg 的 Wiki:数组上的 Bash 指南条目

files=()
while read -r -d $'\0'; do
    files+=("$REPLY")
done < <(find *.txt -print0)
Run Code Online (Sandbox Code Playgroud)

页面上有对数组的详细说明,将这个构造逐个元素分解;值得一读。


jor*_*anm 5

如果这些文件都在同一目录中,那么除了 jasonwryan 的答案之外,您还有其他一些选择。

使用 glob:

files=(file[0-9].txt)
Run Code Online (Sandbox Code Playgroud)

只匹配问题中的示例文件:

files=(file[1-3].txt)
Run Code Online (Sandbox Code Playgroud)

如果你有 bash 版本 4 或更高版本,你甚至可以递归地 glob:

shopt -s globstar
files=(**/file[0-9].txt)
Run Code Online (Sandbox Code Playgroud)

使用大括号扩展将数组限制为仅示例文件:

files=(file{1..3}.txt)
Run Code Online (Sandbox Code Playgroud)

与其他两个示例不同,这将使用文件名填充数组,即使它们不存在。出于这个原因,可能不需要支架扩展。