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?
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?
Antworten:
Nein, das ist nicht gefährlich. Die extglob
Option 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 extglob
aktiviert 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 .