答案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 出现一次或多次。该模式\/
与斜杠匹配(反斜杠表示这不是分隔模式和替换文本的斜杠),因此+(\/)
匹配一个或多个/
字符。
答案2
从bash(1)
手册页:
+(pattern-list)
Matches one or more occurrences of the given patterns
因此,它就像正+
则表达式运算符,应用于括号内的模式。
答案3
取决于外壳。我用桀骜,它有很多功能:
在这里,我可以选择不区分大小写的名称:
#!/bin/zsh
setopt extendedglob
for f in (#i)*.(jpeg|jpg|png); do
{
mogrify -scale 1280x1280 $f
exiv2 rm $f
mv $f $f:l
} &
done