Bash 中 #* 是什么意思?

Bash 中 #* 是什么意思?

今天我放弃了其他所有事情来尝试阅读 Bash 脚本这里

数组索引中的“#*”是什么意思

${line#* }

在任何地方都找不到这个,而且不可能搜索到这样的特殊字符。

回答时请提供文献参考。

答案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

相关内容