![2개의 파일 이름 배열이 동일한지 확인하세요.](https://linux55.com/image/142855/2%EA%B0%9C%EC%9D%98%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%20%EB%B0%B0%EC%97%B4%EC%9D%B4%20%EB%8F%99%EC%9D%BC%ED%95%9C%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EC%84%B8%EC%9A%94..png)
그래서 나는 다음을 가지고 있습니다 :
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)