检查 2 个文件名数组是否相同

检查 2 个文件名数组是否相同

所以我有以下内容:

cat file | grep -E regex  

它给出了行列表
现在我还有一个 for 循环来生成文件列表
所以就像我有 2 个数组。
但是如果两个数组具有相同的内容,我如何在 bash 中检查呢?我的 bash 版本不支持关联数组 (4.2)。
我应该找到 bash 以外的另一种方法吗?还是用 bash 也可以轻松实现?

更新
我检查for i in foo/bar/*并记录路径,所以我基本上有一个地方:

foo/bar/a/b  
foo/bar/c/d   
foo/bar/e etc  

所以我本质上只是想重新运行 for 循环并检查是否得到完全相同的结果。

答案1

假设您的数组名为“array1”和“array2”,则使用 bash 代码检查是否相等:

equal=true
if [[ ${#array1[@]} -ne ${#array2[@]} ]]; then
    equal=false
else
    while IFS= read -r elem1 <&3; IFS= read -r elem2 <&4; do
        if [[ "$elem1" != "$elem2" ]]; then
            equal=false
            break
        fi
    done 3< <(printf "%s\n" "${array1[@]}" | sort) \
         4< <(printf "%s\n" "${array2[@]}" | sort)
fi
if $equal; then
    echo arrays have the same contents
else
    echo arrays have different contents
fi

这将比调用外部工具慢(可能“慢得多”)。

diff <(grep -E regex file1) <(grep -E regex file2)

相关内容