1

我想把它减少到一行:

item=${_menu_sel_value/M--/}
item=${item/-M-/}
item=${item/D--/}
item=${item/-D-/}
item=${item/??-/}

这是一个测试样本。用户从 shell 菜单中选择以下选项之一,并将他们的选择传递到上面的 bash 脚本代码中(因此,只需要匹配其中一种可能性):

 -D-branch.sh
 M--cfg/aliases.cfg
 -M-functions/0300.menu.sh
 M--git_aliases.sh
 ??-add.sh

是否可以?

我试过类似的东西:

item=${_menu_sel_value/^[M\-]/}

但它没有用。

4

2 回答 2

2

我想这就是你要找的。

shopt -s extglob
item=${_menu_sel_value/@(M--|-M-|D--|-D-|\?\?-)/}

该模式@(a|b|c)匹配任何一个模式abc。请注意需要转义?,因为它是匹配模式中任何单个字符的通配符。

于 2013-05-01T18:09:25.117 回答
0

如果你知道你总是需要去掉前三个字符,你可以使用子字符串操作:

item=${_menu_sel_value:3}
于 2013-05-02T04:18:34.160 回答