스크립트 내의 확장된 와일드카드 - 내가 뭘 잘못하고 있는 걸까요?

스크립트 내의 확장된 와일드카드 - 내가 뭘 잘못하고 있는 걸까요?

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

최종 목표는 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이 아닌 값으로 종료하려면 셸 옵션을 추가하세요.

관련 정보