在 bash shell 中,如何根据元素是否存在来过滤路径数组?

在 bash shell 中,如何根据元素是否存在来过滤路径数组?

我正在使用 bash shell。我有这个代表文件路径的数组

MY_FILES=(/path/to/file1 /tmp/abc.txt /tmp/test.sh /path/to/file2 /path/to/file3 /tmp/abc.txt)

如何形成一个新的元素数组,其中的路径实际存在于我的文件系统上?

答案1

MY_FILES=(/path/to/file1 /tmp/abc.txt /tmp/test.sh /path/to/file2 /path/to/file3 /tmp/abc.txt)

existing=()
for pathname in "${MY_FILES[@]}"; do
    if [ -e "$pathname" ]; then
        existing+=( "$pathname" )
    fi
done

上面创建了一个新数组 ,其中包含该数组中与文件系统中现有名称相对应的existing条目。MY_FILES它通过迭代数组中的条目,使用测试依次测试每个元素来实现这一点-e,即真的如果给定的路径名​​存在。如果当前路径名存在,则将其作为新元素附加到数组末尾existing

如果您还想确保每个名称都是常规文件,将-e测试改为-f测试。

相关内容