答案1
${parameter%[word]}
删除最小后缀模式。word
应扩展 以生成模式。然后,参数扩展应导致parameter
,并删除与模式匹配的后缀的最小部分。如果存在,word
不得以未加引号的 开头%
。
${parameter%%[word]}
删除最大后缀模式。应word
扩展以生成模式。然后,参数扩展应导致parameter
,其中删除与模式匹配的后缀的最大部分。
${parameter#[word]}
删除最小前缀模式。应word
扩展以生成模式。参数扩展应导致parameter
,其中删除与模式匹配的前缀的最小部分。如果存在,word
不得以未加引号的 开头#
。
${parameter##[word]}
删除最大前缀模式。应word
扩展以生成模式。然后,参数扩展应导致parameter
,其中删除与模式匹配的前缀的最大部分。
[重点是我的]
来源:POSIX 文档。Bash 参考手册的相关片段:这里。
该语法与数组无关。
具体来说,像扩展${line#* }
一样进行扩展$line
,但会从开头删除与 (星号+空格,其中星号匹配零个或多个字符,空格匹配空格字符) 匹配的最小部分*
。即,它会从扩展中删除直到第一个空格的字符。
例子:
$ line='foo bar baz'
$ echo "${line#* }"
bar baz
如果没有内容与模式匹配,则不会删除任何内容:
$ line='no-match'
$ echo "${line#* }"
no-match
${line#* }
仅注意扩展更改为与 不同的东西$line
。单独使用${line#* }
不会重新定义变量:
$ line='foo bar baz'
$ echo "${line#* }"
bar baz
$ echo "$line"
foo bar baz