假设我有这两个“列表”:
#!/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