그래서 대화형 스크립트를 사용하여 다양한 파일을 선택하려고 합니다.
최종 목표는 명령을 사용하는 것이지만 여기서는 데모를 위해 수동으로 변수를 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이 아닌 값으로 종료하려면 셸 옵션을 추가하세요 .