gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:45:12 25 4
gpt4 key购买 nike

假设我有一个 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"

最佳答案

要去除扁平字符串(Hulk 已经给出了数组的答案),您可以打开 extglob shell 选项并运行以下扩展

$ shopt -s extglob
$ unset x
$ x="preffoo bar foo prefbaz baz prefbar"
$ echo ${x//pref*([^ ])?( )}
bar foo baz
extglob *(pattern-list) 需要选项和 ?(pattern-list)形式。这允许您使用正则表达式(尽管与大多数正则表达式的形式不同)而不仅仅是路径名扩展( *?[ )。

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*/}

$

关于arrays - bash:如何根据模式从数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3578584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com