根据man bash的说法:
${parameter#word} ${parameter##word}删除匹配的前缀模式。该单词被展开以产生一个模式,就像在路径名称展开中一样,并使用下面模式匹配下描述的规则与参数的扩展值相匹配。如果模式与参数值的开头匹配,则展开的结果是删除参数的扩展值,并删除最短匹配模式(
#'' case) or the longest matching pattern (the##‘大小写)。如果参数为@或*,则模式删除操作依次应用于每个位置参数,并且展开是结果列表。如果参数是以@或*订阅的数组变量,则模式删除操作依次应用于数组的每个成员,扩展是结果列表。
不知怎么的,我没有找到一种在${parameter#word}和${parameter##word}之间给出不同结果的情况。
我正在寻找能够说明这两种语法之间的不同行为的情况。顺便说一句,什么是最短的匹配模式,什么是最长的匹配模式?
发布于 2021-09-14 21:40:49
我刚找到了这个例子:
$ INT=00011
$ echo "${INT#*0}"
0011
$ echo "${INT##*0}"
11这里,我们首先将字符串"00011“赋值给变量'INT',然后输出由${parameter#word}或${parameter##word}执行的参数展开的结果,参数为'INT‘作为参数,'*0’作为单词模式。
与参数'*0‘的最小匹配是'0',而最大匹配是'000’。
https://unix.stackexchange.com/questions/669013
复制相似问题