extglobを使ったこのシェルコマンドの構文はどういう意味ですか?

extglobを使ったこのシェルコマンドの構文はどういう意味ですか?

存在する 堅牢なルート構築

提案されたソリューションは次のとおりです。

shopt -s extglob; dir="${dir//+(\/)//}"

誰かが私に説明(分析)できますか?私はそれが何をしているのか理解していますが、構文がどのように機能するのかわかりません。

ベストアンサー1

dir="${dir//+(\/)//}"使用中${PARAMETER/PATTERN/STRING}拡張。この場合を分析してみてください(Perlの正規表現修飾子を連想させる構文を使用して/xいいえ有効な Bash 構文):

${       # start expansion
  dir    # the parameter being expanded
  /      # separates parameter from pattern
  /      # double slash means replace all instead of replace first
  +(\/)  # the pattern we're looking for
  /      # separates pattern from replacement
  /      # the replacement text
}        # end expansion

有効にした後extglob+(PATTERN)PATTERN が複数回出現することを示します。パターンは\/スラッシュと一致するため(バックスラッシュはパターンと代替テキストを区別するスラッシュではないことを示します)、+(\/)1つ以上の/文字が一致します。

おすすめ記事