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