Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何替换bash中许多可能匹配项中的任何一个_Bash_Replace - Fatal编程技术网

如何替换bash中许多可能匹配项中的任何一个

如何替换bash中许多可能匹配项中的任何一个,bash,replace,Bash,Replace,我想把它简化为一行: item=${_menu_sel_value/M--/} item=${item/-M-/} item=${item/D--/} item=${item/-D-/} item=${item/??-/} 这是一个测试样本。用户从shell菜单中选择以下选项之一,并将其选择传递到上面的bash脚本代码中(因此,只需匹配其中一种可能性): 可能吗 我试过这样的方法: item=${_menu_sel_value/^[M\-]/} 但是没有用。我想这就是你要找的 shopt -

我想把它简化为一行:

item=${_menu_sel_value/M--/}
item=${item/-M-/}
item=${item/D--/}
item=${item/-D-/}
item=${item/??-/}
这是一个测试样本。用户从shell菜单中选择以下选项之一,并将其选择传递到上面的bash脚本代码中(因此,只需匹配其中一种可能性):

可能吗

我试过这样的方法:

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

但是没有用。

我想这就是你要找的

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

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

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

item=${_menu_sel_value:3}

菜单选择值的典型值是什么?目前还不清楚是否可以进行多个替换,或者您尝试替换的顺序是否重要(可能很重要,因为您只替换找到的每个匹配项中的第一个)。
item=${_menu_sel_value:3}