加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 删除精确的bash数组元素?

发布时间:2020-12-14 06:00:46 所属栏目:百科 来源:网络整理
导读:我试图从bash数组中删除任何一个关键字的第一个外观. ARRAY=(foo bar and any number of keywords)keywords=(red,rednet,rd3.0) 我删除了这样的关键字:ARRAY =(${ARRAY [@] /“$keyword”/})然后如果“red’是第一个找到的关键字,它将从两个关键字中删除’r
我试图从bash数组中删除任何一个关键字的第一个外观.

ARRAY=(foo bar and any number of keywords)
keywords=(red,rednet,rd3.0)

我删除了这样的关键字:ARRAY =(${ARRAY [@] /“$keyword”/})然后如果“red’是第一个找到的关键字,它将从两个关键字中删除’red’并返回”foo bar net “而不是”foo bar rednet“.

编辑:这是一个例子,希望这使它更清晰.

for keyword in ${ARRAY[@]}; do
      if [ "$keyword" = "red" ] || [ "$keyword" = "rd3.0" ] || [ "$keyword" = "rednet" ]; then
           # HERE IS TROUBLE
           ARRAY=( ${ARRAY[@]/"$keyword"/} )
           echo "ARRAY is now ${ARRAY[@]}"
           break
      fi
 done

如果ARRAY =(red rednet rd3.0)返回net rd3.0而不是rednet rd3.0

如果我使用unset,:unset ${ARRAY [“$keyword”]} bash抱怨如果rd3.0在数组中::语法错误:无效算术运算符(错误标记为“.0”)
从阵列中取消设置或删除完全匹配的安全方法是什么?

解决方法

使用带有索引处数组值的unset命令,如下所示:

#!/usr/bin/env bash
ARRAY=(foo bar any red alpha number of keywords rd3.0 and)
keywords=(red,rd3.0)

index=0
for keyword in ${ARRAY[@]}; do
      if [ "$keyword" = "red" ] || [ "$keyword" = "rd3.0" ] || [ "$keyword" = "rednet" ]; then
           # HERE IS TROUBLE
           # ARRAY=( ${ARRAY[@]/"$p"/} )
           unset ARRAY[$index]
           echo "ARRAY is now: ${ARRAY[@]}"
           break
      fi
      let index++
 done

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读