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