
그래서 나는 다음을 가지고 있습니다 :
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)