变量名后的哈希作为 bash 中的运算符有什么作用?

Icy*_*Ice 7 bash

我找到了这个代码:

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)

patternvariable. 在您的情况下,pattern包含 (a)*匹配零个或多个任何字符,以及 (b)=仅匹配=.

查看man bash更多信息。

例子

$ i='ab=cd'
$ echo "${i#a}" 
b=cd
$ echo "${i#*=}" 
cd
Run Code Online (Sandbox Code Playgroud)


Dav*_*ter 5

Bash 参考手册

3.5.3 Shell 参数扩展

[…]

${parameter#word}
Run Code Online (Sandbox Code Playgroud)

这个词被扩展以产生一个模式,就像在文件名扩展中一样(参见文件名扩展)。如果模式匹配参数的扩展值的开头,则扩展的结果是删除了最短匹配模式[…]的参数的扩展值。

例子

$ i='ab=cd'
$ echo "${i#a}" 
b=cd
$ echo "${i#*=}" 
cd
Run Code Online (Sandbox Code Playgroud)

无耻地从约翰的回答中窃取