说我有一个bash数组(例如所有参数的数组),并想删除匹配某个模式的所有参数,或者将所有剩余的元素复制到一个新的数组.或者,另一方面,保持元素匹配模式.
举例说明:
x=(preffoo bar foo prefbaz baz prefbar)
我想删除所有以pref开头的东西,以获得
y=(bar foo baz)
(订单不相关)
如果我想要一个由空白分隔的单词列表的同样的东西怎么办?
x="preffoo bar foo prefbaz baz prefbar"
y="bar foo baz"
要剥去一个平面字符串(绿巨人已经给出了数组的答案),可以打开extglob shell选项并运行以下扩展
原文链接:https://www.f2er.com/bash/386133.html$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*/} $