dir="${dir//+(\/)//}"
está usando a ${PARAMETER/PATTERN/STRING}
expansão . Quebrando-a nesse caso (usando uma sintaxe que lembra o modificador /x
regex do Perl, não sintaxe Bash válida):
${ # 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
Com extglob
ativado, +(PATTERN)
significa um ou mais ocorrências de PADRÃO. O padrão \/
corresponde a uma barra (a barra invertida serve para indicar que essa não é a barra que separa o padrão e o texto de substituição), portanto, +(\/)
corresponde a um ou mais caracteres /
.