${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-

アスタリスクを使用した例*:

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

引用: man bash:${parameter/pattern/string}

関連情報