从bash

时间:2018-01-20 20:20:49

标签: bash

我有一个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

1 个答案:

答案 0 :(得分:1)

使用extglob

shopt -s extglob                         # enables extended globbing
switches=${switches//-c *([^ ])}
  • *([^ ]):匹配任意数量的非空格

这将为您留下不必要的空间。更复杂的解决方案:

switches=${switches//-c *([^ ])*( )}
switches=${switches/%*( )}
  • *([^ ])*( ):在
  • 之后匹配任意数量的非空格和任意数量的空格
  • ${switches/%*( )}:如果最后一个选项也是-c,则上面的代码不会删除它留下的空格。 /%*( )从末尾删除任意数量的空格