在 Bash 中,变量名后的井号作为运算符起什么作用?

在 Bash 中,变量名后的井号作为运算符起什么作用?

我找到了这个代码:

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

无耻地窃取约翰的回答

相关内容