다음 두 개의 "목록"이 있다고 가정해 보겠습니다.
#!/usr/bin/env bash
git fetch origin;
first_list=( );
second_list=( );
git branch --merged "remotes/origin/dev" | tr -d ' *' | while read branch; do
first_list+=( "$branch" );
done
git branch --merged HEAD | tr -d ' *' | while read branch; do
second_list+=( "$branch" );
done
첫 번째 목록과 두 번째 목록의 요소가 교차하는 요소를 보유하는 세 번째 목록을 만들어야 합니다. 어떻게 해야 하나요?
답변1
연관 배열을 도우미로 사용하여 한 목록의 요소(키)를 추적한 다음 다른 목록의 요소를 빠르게 확인합니다.
#!/bin/bash
list1=( 1 3 5 6 7 8 bumble bee )
list2=( 2 4 4 4 6 7 8 bee beer )
declare -A seen
for item in "${list1[@]}"; do
seen[$item]=1
done
for item in "${list2[@]}"; do
if [ -n "${seen[$item]}" ]; then
intersection+=( "$item" )
fi
done
echo 'Intersection:'
printf '\t%s\n' "${intersection[@]}"
이는 정확한 문자열 일치를 사용하여 두 목록 간의 요소를 비교합니다.
결과:
Intersection:
6
7
8
bee
답변2
어때요?
for FN in ${first_list[@]}; do [[ ${second_list[@]} =~ $FN ]] && third_list+=($FN); done