我找到了很多关于这个的帖子,但是我不能把它们拼凑起来解决我的问题。假设我有两个数组:

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

我想要第三个这样的阵列
array3=( adir anicedir )

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

最佳答案

没有什么特别简短的,因为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

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

09-05 16:26