在 稳健地构建路径中,
提出的解决方案包括:
shopt -s extglob; dir="${dir//+(\/)//}"
Run Code Online (Sandbox Code Playgroud)
有人可以为我解释(解析)吗?我明白它在做什么,但不明白语法是如何工作的。
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
Run Code Online (Sandbox Code Playgroud)
与extglob
启用,+(PATTERN)
意味着模式的一个或多个出现。模式\/
匹配一个斜杠(反斜杠表示这不是分隔模式和替换文本的斜杠),所以+(\/)
匹配一个或多个/
字符。