![bash: ()가 스크립트에서는 오류를 일으키지만 명령줄에서는 오류가 발생하지 않는 이유는 무엇입니까?](https://linux55.com/image/89511/bash%3A%20()%EA%B0%80%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%EB%8A%94%20%EC%98%A4%EB%A5%98%EB%A5%BC%20%EC%9D%BC%EC%9C%BC%ED%82%A4%EC%A7%80%EB%A7%8C%20%EB%AA%85%EB%A0%B9%EC%A4%84%EC%97%90%EC%84%9C%EB%8A%94%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
명령줄에 다음을 입력하면:
_longopt ()
{
case "$prev" in
--+([-a-z0-9_]))
echo foo
;;
esac;
}
예상대로 작동합니다.
이것을 스크립트(foo.sh)에 넣으면 실패합니다.
./foo.sh: line 6: syntax error near unexpected token `('
./foo.sh: line 6: ` --+([-a-z0-9_]))'
왜?
더 중요한 것은 위와 같은 함수를 정의한 경우 이를 스크립트에서 작동하는 함수로 자동 변환하려면 어떻게 해야 합니까?
$ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
답변1
다음을 수행해야 합니다.
shopt -s extglob
나에게 extglob을 지적해준 @Stéphane Chazales에게 감사드립니다.