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이 한 번 이상 나타남을 나타냅니다. 패턴은 \/슬래시와 일치하므로(백슬래시는 패턴과 대체 텍스트를 구분하는 슬래시가 아님을 나타냄) +(\/)하나 이상의 /문자가 일치합니다.

답변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

관련 정보