这按预期工作:
>echo -= | sed 's/[\=\-]//g'
>
Run Code Online (Sandbox Code Playgroud)
但这不是:
>echo -= | sed 's/[\-\=]//g'
>-
Run Code Online (Sandbox Code Playgroud)
为什么??
在字符类的-可用于创建一个范围(例如[A-Z],其是从所有字符A到Z,而不是三个字符A,-和Z).
因此当你写[\-\=]正被看作是从范围\到\=(我不认为逃避=是有意义这里).
但是当你编写[\=\-]范围解释是不可能的,因为]类的终止不能是范围的结束.
同样,如果你写了,[-\=]你就不会对该类进行范围解释.
正如我所说,虽然我不认为逃避这些角色中的任何一个都是有意义的,事实上,触发这个问题的原因是[-=]同样的,并且没有范围问题.
以类似的方式,用^在字符类的开始否定了阶级,所以如果你想有一个字面^的一类,它需要未在班里第一个字符.