我找到了这个代码:
EXTENSION="${i#*=}"
Run Code Online (Sandbox Code Playgroud)
它所做的是获取变量$i,该变量是脚本的参数并复制该字符之后的所有内容=。所以如果我做类似的事情myscript.sh -e=wow,它会复制wow到$EXTENSION. 但是我想知道#*=这个顺序中的符号是什么意思?似乎#*所有的副本都放在一起,=是它复制的角色,还是更复杂?
Joh*_*024 11
这是前缀删除的一个例子。一般形式为:
${variable#pattern}
Run Code Online (Sandbox Code Playgroud)
它pattern从variable. 在您的情况下,pattern包含 (a)*匹配零个或多个任何字符,以及 (b)=仅匹配=.
查看man bash更多信息。
$ i='ab=cd'
$ echo "${i#a}"
b=cd
$ echo "${i#*=}"
cd
Run Code Online (Sandbox Code Playgroud)
Bash 参考手册
3.5.3 Shell 参数扩展
[…]
Run Code Online (Sandbox Code Playgroud)${parameter#word}这个词被扩展以产生一个模式,就像在文件名扩展中一样(参见文件名扩展)。如果模式匹配参数的扩展值的开头,则扩展的结果是删除了最短匹配模式[…]的参数的扩展值。
$ i='ab=cd'
$ echo "${i#a}"
b=cd
$ echo "${i#*=}"
cd
Run Code Online (Sandbox Code Playgroud)
无耻地从约翰的回答中窃取