Ist es gefährlich, immer Extglob zu haben?

7

Wenn ich mich einschalte extglob, um Dinge wie zu tun

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

Ist es unklug, danach weiterzumachen extglob? Gibt es irgendwelche Vorbehalte, es ständig zu haben?

PetaspeedBeaver
quelle
Doppelte Antwort auf stackoverflow: stackoverflow.com/questions/17191622
PetaspeedBeaver

Antworten:

13

Nein, das ist nicht gefährlich. Die extglobOption erhöht nicht das Risiko, versehentlich Schäden zu verursachen. Der einzige Grund, warum es nicht standardmäßig aktiviert ist, ist die Abwärtskompatibilität mit früheren Versionen von bash, und selbst dann sind die Fälle, in denen die Kompatibilität unterbrochen wird, ziemlich weit hergeholt, da das meiste, was extglobaktiviert wird, ein Syntaxfehler ist, wenn dies nicht der Fall ist gesetzt aufgrund der in einem Wort vorkommenden öffnenden Klammer.

$ 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

Der einzige Fall, in dem ich mir vorstellen kann, wo die Kompatibilität mit bash -without-extglob und POSIX sh unterbrochen wird, ist, wenn ein Muster aus einer Variablen erweitert wird. Die Extglob-Muster sind in Dateinamen ungewöhnlich, daher ist dies in der Praxis wahrscheinlich kein Problem.

 $ bash -c $'shopt -s extglob\necho $0' '/@(u|v)*'
/usr /var
$ bash -c $'echo $0' '/@(u|v)*'
/@(u|v)*

Die Inkompatibilitäten sind so harmlos, dass diese Muster in ksh standardmäßig aktiviert sind und neuere Versionen von bash standardmäßig mit der Option on ( ./configure --enable-extended-glob-default) kompiliert werden können .

Gilles 'SO - hör auf böse zu sein'
quelle