![예기치 않은 표시 "(" 근처의 구문 오류 또는 잘못된 실행](https://linux55.com/image/138959/%EC%98%88%EA%B8%B0%EC%B9%98%20%EC%95%8A%EC%9D%80%20%ED%91%9C%EC%8B%9C%20%22(%22%20%EA%B7%BC%EC%B2%98%EC%9D%98%20%EA%B5%AC%EB%AC%B8%20%EC%98%A4%EB%A5%98%20%EB%98%90%EB%8A%94%20%EC%9E%98%EB%AA%BB%EB%90%9C%20%EC%8B%A4%ED%96%89.png)
터미널을 통해 X 디렉터리에서 작업을 시도하고 있지만 Y 디렉터리에서는 작업을 수행하지 않고 있습니다. 내가 할 때
cd /mnt/dir/ &&
for i in !(dira|dirb|dird)/; do echo "$i"; done &&
cd y/ && for i in !(dirz)/; do echo "$i"; done
터미널에서는 모든 것이 괜찮지만 .sh 파일에 넣고 실행하려고 하면 또는 을 얻고 syntax error near unexpected token (
, 이스케이프하면 (
해당 부분 |
만 출력으로 가져옵니다 (예 : : ).for
!(dira|dirb|dird)/
.sh 파일이나 .bashaliases 파일의 별칭에서 실행되도록 하려면 이 문제를 어떻게 해결해야 합니까?
답변1
확장된 글로빙 모드를 사용하고 있습니다. 이것이 스크립트에서 작동하려면 다음을 확인하십시오.
bash
스크립트 실행을 위한extglob
스크립트에서 셸 옵션을 활성화합니다.
extglob
다음 명령을 사용하여 셸 옵션을 활성화 할 수 있습니다.
shopt -s extglob
스크립트 소스에서