내가 extglob
뭔가를 시작하면
shopt -s extglob
rm !(*.html|*.txt) # remove everything except html and txt files
extglob
그 후에도 계속하는 것은 현명하지 못한 일입니까? 항상 착용하는데 주의사항이 있나요?
답변1
아니요, 위험하지 않습니다. 이 extglob
옵션은 우발적인 손상 위험을 증가시키지 않습니다. 기본적으로 extglob
활성화 되지 않은 유일한 이유는 이전 버전의 bash와의 하위 호환성 때문이며, 심지어 호환성이 깨지는 경우는 꽤 어렵습니다. 왼쪽 괄호에 설정된 단어.
$ bash -c $'echo /@(u|v)*'
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `echo /@(u|v)*'
$ bash -c $'shopt -s extglob\necho /@(u|v)*'
/usr /var
내가 생각할 수 있는 유일한 상황은 bash -without-extglob 및 POSIX sh와의 호환성이 깨지는 경우로 변수에서 패턴을 확장할 때입니다. extglob 패턴은 파일 이름에 일반적이지 않으므로 실제로는 문제가 되지 않습니다.
$ bash -c $'shopt -s extglob\necho $0' '/@(u|v)*'
/usr /var
$ bash -c $'echo $0' '/@(u|v)*'
/@(u|v)*
비호환성은 매우 심각합니다. ksh는 기본적으로 이러한 모드를 활성화하며 ./configure --enable-extended-glob-default
최신 버전의 bash는 기본 옵션( )을 사용하여 컴파일할 수 있습니다.