![在 bash shell 中,如何根据元素是否存在来过滤路径数组?](https://linux22.com/image/217307/%E5%9C%A8%20bash%20shell%20%E4%B8%AD%EF%BC%8C%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E5%85%83%E7%B4%A0%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%E6%9D%A5%E8%BF%87%E6%BB%A4%E8%B7%AF%E5%BE%84%E6%95%B0%E7%BB%84%EF%BC%9F.png)
我正在使用 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
测试。