존재하다 견고하게 경로 구축,
제안된 솔루션은 다음과 같습니다.
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이 한 번 이상 나타남을 나타냅니다. 패턴은 \/
슬래시와 일치하므로(백슬래시는 패턴과 대체 텍스트를 구분하는 슬래시가 아님을 나타냄) +(\/)
하나 이상의 /
문자가 일치합니다.
답변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