bash 스크립트에서 작동하지 않는 명령줄의 셸 매개변수 확장

bash 스크립트에서 작동하지 않는 명령줄의 셸 매개변수 확장

다음을 고려하세요GNU 쉘 매개변수 확장bash 명령줄에서, 즉여기에 설명되어 있습니다:

$ a='hello world    example'

$ echo ${a//+( )/_}
hello_world_example

그러나 동일한 매개변수 확장은 더 이상 bash 스크립트에서 작동하지 않습니다.

# !/usr/bin/env bash
a='hello world    example'
echo "${a//+( )/_}"

결과는 변경되지 않은 문자열입니다.

hello world    example

" "더 간단한 매개변수 확장을 통해 command 뒤에 큰따옴표가 필요하다는 사실을 이미 알고 있지만 echo이유는 모르겠습니다.

하지만 이 특정 매개변수 확장이 bash 스크립트에서 작동하도록 하려면 또 무엇을 해야 할까요? 왜?

답변1

+(...)의 일부입니다확장된 글로벌를 사용하여 명시적으로 활성화해야 합니다 shopt -s extglob.

대화형 셸에서 작동한다면 아마도 shopt -s extglob셸의 시작 파일 중 하나에 있을 것 bashrc입니다. 명시적으로 스크립트에 추가합니다. 파서가 작동하는 방식을 변경하는 방법에 몇 가지 단점이 있으므로 자체 라인에 있는 것이 좋습니다. 다음을 참조하세요. shopt extglob 설정에 대한 범위 제한은 무엇입니까? 그리고 다른 옵션은?

관련 정보