元素过滤

数组和集合 / 数组

numbers=(1 2 3 4 5)

#bash has no filter: a loop keeps the elements that pass the test
odd=()
for number in "${numbers[@]}"; do
    if ((number % 2 == 1)); then
        odd+=("$number")
    fi
done
#odd is (1 3 5)

#awk filters lines by a condition: here the even ones
mapfile -t evens < <(printf '%s\n' "${numbers[@]}" | awk '$1 % 2 == 0')
#evens is (2 4)

echo "odd is (${odd[*]})"
echo "evens is (${evens[*]})"