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

前端之家收集整理的这篇文章主要介绍了数组 – bash:如何根据模式从数组中删除元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
说我有一个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*/}

$
原文链接:https://www.f2er.com/bash/386133.html

猜你在找的Bash相关文章