Опасно ли всегда иметь extglob?

Если я extglob чтобы сделать что-то вроде

 shopt -s extglob rm !(*.html|*.txt) # remove everything except html and txt files 

Неразумно ли сохранять extglob после этого? Есть ли какие-либо предостережения о его наличии на все время?

Нет, это не опасно. Опция extglob не увеличивает риск случайного нанесения ущерба. Единственная причина, по которой она не включена по умолчанию, – это обратная совместимость с предыдущими версиями bash, и даже тогда случаи, когда она нарушает совместимость, довольно надуманны, потому что большая часть того, что extglob включает, является синтаксической ошибкой, если она isn ' t из-за открывающейся скобки, имеющейся в одном слове.

 $ 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 имеет эти шаблоны по умолчанию, а последние версии bash могут быть скомпилированы с опцией по умолчанию ( ./configure --enable-extended-glob-default ).