我找到了这个代码:
EXTENSION="${i#*=}"
它的作用是获取变量$i
,它是脚本的参数,并复制字符 之后的所有内容=
。因此,如果我执行类似 的操作myscript.sh -e=wow
,它会复制wow
到$EXTENSION
。但我想知道这个顺序中的符号是什么#*=
意思?似乎#*
是一起复制所有内容,并且=
是复制后的字符,还是更复杂?
答案1
这是一个例子前缀删除.一般形式为:
${variable#pattern}
pattern
这会从 的开头删除与 glob 的最短匹配variable
。 在您的例子中,由 (a)匹配零个或多个任意字符和 (b)仅匹配pattern
组成。*
=
=
请参阅man bash
以了解更多信息。
例子
$ i='ab=cd'
$ echo "${i#a}"
b=cd
$ echo "${i#*=}"
cd
答案2
Bash 参考手册
3.5.3 Shell参数扩展
[…]
${parameter#word}
该词被扩展以产生一个模式,就像文件名扩展一样(参见文件名扩展)。如果模式与参数的扩展值的开头匹配,则扩展的结果是删除最短匹配模式[…]后的参数的扩展值。
例子
$ i='ab=cd'
$ echo "${i#a}"
b=cd
$ echo "${i#*=}"
cd
无耻地窃取约翰的回答