两个bash数组中的模式匹配

时间:2016-12-01 13:45:30

标签: arrays linux string bash pattern-matching

我发现了不少帖子,但无法将这些内容整理在一起以解决我的问题。所以说我有两个阵列:

array1=( adir bdir anicedir )
array2=( adir anice )

我想有第三个这样的数组

array3=( adir anicedir )

更具体地说,如果array2中第i个元素的前5个字符与array1中任何元素的前5个字符匹配,则将array2[i]替换为array1[i] < / p>

1 个答案:

答案 0 :(得分:2)

没有什么特别短的,因为bash不是数据处理语言。你需要使用循环。

array1=( adir bdir anicedir )
array2=( adir anice )
array3=()

for val2 in "${array2[@]}"; do
    for val1 in "${array1[@]}"; do
        if [[ ${val1:0:5} == "${val2:0:5}" ]]; then
            array3+=("$val1")
            break
        fi
    done
done

引用==的右侧确保执行文字字符串比较,而不是模式匹配。