数组 – 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*/} $ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |