我在我的剧本中有这个检查:
[[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="$VALUE"
正在编写包含从一个文件到数组的联系人*的行。如何添加另一个将跳过该行中的xi *值并将其写入数组的检查?
我尝试过类似的事情:
[[ $KEY == contact@(s|_groups) ]] && [[ $VALUE != "xi*" ]] && CONFIG[$KEY]="$VALUE"
但它不适合我。 :/
答案 0 :(得分:1)
[[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="${VALUE//xi*([^,])}" && CONFIG[$KEY]="${VALUE//,xi*([^,])}"
这是给我想要结果的支票。 :)
答案 1 :(得分:0)
第一个文件如下所示:
… contacts Marko Geršić,Mijo,nagiosadmin,Patrick,ximgersic …
第二个文件需要如下所示:
… contacts Marko Geršić,Mijo,nagiosadmin,Patrick …
所以,没有联系*行中的xi *。
由于xi*
位于$VALUE
的末尾,您只需使用bash
Parameter Expansion 删除匹配的后缀模式:
[[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="${VALUE%,xi*}"
xi *值并不总是在行的末尾
如果xi*
位于$VALUE
元素中,您可以使用模式替换:
[[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="${VALUE/,xi*([^,])}"
如果有多个xi *值?
要删除多个xi*
元素,您只需将上面的/
加倍:
[[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="${VALUE//,xi*([^,])}"