
다음을 고려하세요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 설정에 대한 범위 제한은 무엇입니까? 그리고 다른 옵션은?