所以我有以下内容:
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)