${parameter/#pattern/string} 中的哈希有什么作用?

${parameter/#pattern/string} 中的哈希有什么作用?

我看到以下替换本文:

${PWD/#$HOME/~}

与此相比如何?

${PWD/$HOME/~}

两者似乎都是一样的。我不知道为什么包含哈希值。

答案1

man bash,解释${parameter/pattern/string}

如果模式以 # 开头,则它必须匹配参数扩展值的开头。如果模式以 % 开头,则它必须匹配参数扩展值的末尾。

> var=abcd
> echo "${var/bc/_}"
a_d
> echo "${var/#bc/_}"
abcd

答案2

通过一些示例谈论 ${parameter/pattern/string} 格式的模式匹配和替换:

如果模式以 / 开头,则模式的所有匹配项都将替换为字符串。通常只替换第一个匹配项。

> test=test
> echo ${test//t/-} 
> -es-

如果模式以 # 开头,则它必须匹配参数扩展值的开头。

> test=test
> echo ${test/#t/-}
> -est

如果模式以 % 开头,则它必须匹配参数扩展值的末尾。

> test=test
> echo ${test/%t/-}
> tes-

使用 asterix 的示例*

> test=test
> echo ${test/#*es/-}
> -t

参考: man bash:${parameter/pattern/string}

相关内容