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

数组 – bash:如何根据模式从数组中删除元素

发布时间:2020-12-15 18:43:25 所属栏目:安全 来源:网络整理
导读:说我有一个bash数组(例如所有参数的数组),并想删除匹配某个模式的所有参数,或者将所有剩余的元素复制到一个新的数组.或者,另一方面,保持元素匹配模式. 举例说明: x=(preffoo bar foo prefbaz baz prefbar) 我想删除所有以pref开头的东西,以获得 y=(bar foo
说我有一个bash数组(例如所有参数的数组),并想删除匹配某个模式的所有参数,或者将所有剩余的元素复制到一个新的数组.或者,另一方面,保持元素匹配模式.

举例说明:

x=(preffoo bar foo prefbaz baz prefbar)

我想删除所有以pref开头的东西,以获得

y=(bar foo baz)

(订单不相关)

如果我想要一个由空白分隔的单词列表的同样的东西怎么办?

x="preffoo bar foo prefbaz baz prefbar"

并再次删除所有以pref开头的所有内容

y="bar foo baz"
要剥去一个平面字符串(绿巨人已经给出了数组的答案),可以打开extglob shell选项并运行以下扩展
$shopt -s extglob
$unset x
$x="preffoo bar foo prefbaz baz prefbar"
$echo ${x//pref*([^ ])?( )}
bar foo baz

*(pattern-list)和?(pattern-list)形式需要extglob选项.这允许您使用正则表达式(尽管与大多数正则表达式不同),而不仅仅是路径名扩展(*?[]).

Hulk给数组的答案只能在数组上运行.如果它似乎在平面字符串上工作,它只是因为在测试数组时没有首先设置.

例如

$x=(preffoo bar foo prefbaz baz prefbar)
$echo ${x[@]//pref*/}
bar foo baz
$x="preffoo bar foo prefbaz baz prefbar"
$echo ${x[@]//pref*/}
bar foo baz
$unset x
$x="preffoo bar foo prefbaz baz prefbar"
$echo ${x[@]//pref*/}

$

(编辑:李大同)

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

    推荐文章
      热点阅读