我有一个bash字符串变量:
switches="-r cc -c 1,2,3,4 -u"
其中数字1,2,3,4可以是任何整数,例如:
-c 25,45,78,34。
此外,它可以用更少的数字,例如:
-c 1
-c 1,2
或
-c 1,2,3,4
不能像: -c 1,2,3
所以-c只能有一个,两个或四个整数。
我忘了提到这个模式也可以在字符串变量$ switches的开头或结尾出现,如:
-r cc -u -c 1,2,3,4
-r cc -u -c 1,2,3
还有一件事:这种模式只能出现在$ switches变量中一次。
如何使用bash删除switch变量的'-c 1,2,3,4'部分? 我试过这个:
switches=${switches/ -c /}
但得到这个:
-r cc1,2,3,4 -u
我希望如此:
-r cc -u
Best,Pal
答案 0 :(得分:1)
使用extglob:
shopt -s extglob # enables extended globbing
switches=${switches//-c *([^ ])}
*([^ ])
:匹配任意数量的非空格这将为您留下不必要的空间。更复杂的解决方案:
switches=${switches//-c *([^ ])*( )}
switches=${switches/%*( )}
*([^ ])*( )
:在${switches/%*( )}
:如果最后一个选项也是-c
,则上面的代码不会删除它留下的空格。 /%*( )
从末尾删除任意数量的空格