MSYS2: 명령이 터미널에서는 제대로 작동하지만 스크립트에 구문 오류 "("가 있습니다.

MSYS2: 명령이 터미널에서는 제대로 작동하지만 스크립트에 구문 오류 "("가 있습니다.

Windows에서는 MSYS2를 사용하여 실행 파일의 파일 확장자를 출력에 다시 추가하고 싶습니다( which있는 경우). 다음 줄은 다음과 같습니다.

locAlt="$(which "mingw32-make")" ; echo "$locAlt" ; locAlt=("$locAlt"+(|.*)) ; echo "$locAlt"

이것은 내 컴퓨터에서 잘 작동하고 인쇄됩니다.

/mingw64/bin/mingw32-make
/mingw64/bin/mingw32-make.exe

그러나 이제 스크립트( one-liner.sh)에 동일한 줄을 넣었습니다.

#/bin/bash
locAlt="$(which "mingw32-make")" ; echo "$locAlt" ; locAlt=("$locAlt"+(|.*)) ; echo "$locAlt"

나는 시도 nano하고 Notepad++(줄 끝을 선택하고 "UNIX (LF)"로 설정할 수 있음) cat -v one-liner.sh위에 표시된 파일을 보여주는 출력을 확인했습니다 (아니요 ^M,이 문제). 그러나 다음을 ./one-liner.sh사용하여 파일을 실행하려고 하면

./one-liner.sh: line 2: syntax error near unexpected token `('
./one-liner.sh: line 2: `locAlt="$(which "mingw32-make")" ; echo "$locAlt" ; locAlt=("$locAlt"+(|.*)) ; echo "$locAlt"'

왜 그럴까요?

답변1

그것은 밝혀졌다이 답변적용 가능합니다. shopt -s extglob작동하도록 스크립트에 추가되었습니다 . 분명히 구문은 +(... 이미 "확장된 와일드카드"에 속합니다.

관련 정보