스크립트 내부의 확장된 글로빙 - 내가 뭘 잘못하고 있나요?

스크립트 내부의 확장된 글로빙 - 내가 뭘 잘못하고 있나요?

그래서 대화형 스크립트를 사용하여 다양한 파일을 선택하려고 합니다.

최종 목표는 명령을 사용하는 것이지만 여기서는 데모를 위해 수동으로 변수를 read할당했습니다.glob

#!/bin/bash
shopt -s extglob
# read -rp "Please enter a globbing string:"$'\n' glob

# This will give me an error (See below)
glob=*2020_04_03_{06..18}.jpg
/bin/ls -la /mnt/drive1/images/*/*/${glob}

# While this will return the desired files
/bin/ls -la /mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg

오류는 다음과 같습니다.

Error /bin/ls: cannot access "/mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg": No such file or directory

그렇다면 변수를 할당하거나 경로에 변수를 glob추가할 때 여기서 무엇을 놓치고 있습니까 ?glob

해결책:

해결책을 찾았지만 이유는 잘 모르겠습니다.

bash <<EOF
/bin/ls -la /mnt/drive1/images/*/*/${glob} 
EOF

나에게 원하는 결과를 줄 것이다.

답변1

변수 대신 배열 할당을 사용할 수 있습니다.

shopt -s nullglob  ##: just in case there is non match for the glob.

glob=(*2020_04_03_{06..18}.jpg) ##: This will expand the glob * and brace expansion.

/bin/ls -la /mnt/drive1/images/*/*/"${glob[@]}"
  • 이는 샘플 코드에 적합합니다.

  • 확장 순서에 대해 @kusalananda가 언급한 변수로 중괄호 확장 내부의 숫자를 바꾸기로 결정하면 문제가 발생합니다.

  • failglob오류를 확인하고 일치하는 패턴이 없으면 0이 아닌 값으로 종료하려면 셸 옵션을 추가하세요 .

관련 정보