내 비대화형 bash 쉘 에는 extglob off
.shopt -s extglob
if .. then .. else
다음과 같은extglob에 따라 다름잘못된 명령: syntax error near unexpected token '('
.
어디에서 설정할 수 extglob
있으며 왜 제한이 있나요? 다른 옵션에도 적용되나요? ...GNU 배쉬 4.1.5
이것은 작동합니다:
shopt -s extglob
if true ;then
touch a.bcd; ls a.@(bcd)
fi
실패합니다.
if true ;then
shopt -s extglob
touch a.bcd; ls a.@(bcd)
fi
... line 17: syntax error near unexpected token `('
... line 17: `touch a.bcd; ls a.@(bcd)'
답변1
이 문제에 대해 더 권위 있는 소스(예: 매뉴얼 페이지/공식 문서)가 있는지는 확실하지 않지만 이 동작을 설명하는 웹사이트를 찾았습니다.http://mywiki.wooledge.org/glob
extglob 옵션은 특정 문자가 구문 분석되는 방식을 변경하므로 shopt 명령과 확장 glob을 사용하는 후속 명령 사이에 개행 문자(세미콜론뿐만 아니라)가 있어야 합니다. 마찬가지로, 확장된 glob을 사용하는 명령문 블록에 shopt -s extglob을 넣을 수 없습니다. 왜냐하면 블록이 정의될 때 전체 블록을 구문 분석해야 하기 때문입니다. shopt 명령은 블록이 평가될 때까지 적용되지 않습니다. 너무 늦었어. 실제로 bash는 명령문을 평가하기 전에 전체 명령문 블록을 구문 분석하므로 가장 바깥쪽 블록 외부에 extglob을 설정해야 합니다.