问题
的行为
!(pattern-list)
在参数扩展中使用时,它不像我期望的那样工作,特别是
${parameter/pattern/string}
输入
a="1 2 3 4 5 6 7 8 9 10"
测试用例
$ printf "%s\n" "${a/!([0-9])/}"
[blank]
#expected 12 3 4 5 6 7 8 9 10
$ printf "%s\n" "${a/!(2)/}"
[blank]
#expected 2 3 4 5 6 7 8 9 10
$ printf "%s\n" "${a/!(*2*)/}"
2 3 4 5 6 7 8 9 10
#Produces the behaviour expected in previous one, not sure why though
$ printf "%s\n" "${a/!(*2*)/,}"
,2 3 4 5 6 7 8 9 10
#Expected after previous worked
$ printf "%s\n" "${a//!(*2*)/}"
2
#Expected again previous worked
$ printf "%s\n" "${a//!(*2*)/,}"
,,2,
#Why are there 3 commas???
眼镜
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
笔记
这些是非常基本的示例,因此如果可以在答案中包含更复杂的示例和解释,那么请这样做。
如果需要更多信息或示例,请在评论中告诉我。
已经看过extglob 如何与 shell 参数扩展一起工作?,甚至评论了该特定问题的问题所在,因此请不要将其标记为骗子。