extglobを常に開いたままにするのは危険ですか?

extglobを常に開いたままにするのは危険ですか?

何かを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はデフォルトオプション()を使用してコンパイルできます。

関連情報