[[
birgt weniger Überraschungen und ist im Allgemeinen sicherer in der Anwendung. Aber es ist nicht portabel - POSIX spezifiziert nicht, was es tut und nur einige Shells unterstützen es (neben bash, ich habe gehört, dass ksh es auch unterstützt). Sie können zum Beispiel Folgendes tun
[[ -e $b ]]
um zu prüfen, ob eine Datei existiert. Aber mit [
müssen Sie zitieren $b
denn es spaltet das Argument auf und erweitert Dinge wie "a*"
(wobei [[
wörtlich nimmt). Das hat auch damit zu tun, wie [
kann ein externes Programm sein und erhält sein Argument ganz normal wie jedes andere Programm (obwohl es auch ein builtin sein kann, aber dann hat es immer noch nicht diese spezielle Behandlung).
[[
hat auch einige andere nette Funktionen, wie den Abgleich regulärer Ausdrücke mit =~
zusammen mit Operatoren, wie sie in C-ähnlichen Sprachen bekannt sind. Hier ist eine gute Seite darüber: [Was ist der Unterschied zwischen test, [
y [[
?](http://mywiki.wooledge.org/BashFAQ/031) y Bash-Tests
32 Stimmen
Seien Sie flexibel, erlauben Sie sich manchmal, einen Ratschlag anzuhören, ohne dass Sie seine tiefgründige Erklärung benötigen :) Was die
[[
damit ist der Code gut und klar, aber denken Sie an den Tag, an dem Sie Ihre Skriptwerke auf das System mit der Standard-Shell portieren werden, die nichtbash
oksh
, usw.[
ist hässlicher und umständlicher, funktioniert aber wieAK-47
in jeder Situation.404 Stimmen
@rook Man kann sich einen Ratschlag auch ohne eine ausführliche Erklärung anhören, klar. Aber wenn man um eine Erklärung bittet und sie nicht bekommt, ist das normalerweise ein Warnsignal. "Vertraue, aber überprüfe" und so weiter.
21 Stimmen
Siehe auch: [Was ist der Unterschied zwischen den Bash-Operatoren [[ vs [ vs ( vs ((?](https://unix.stackexchange.com/q/306111/201820) unter Unix und Linux SE.
30 Stimmen
@rook mit anderen Worten: "Tu, was man dir sagt, und stell keine Fragen"
30 Stimmen
@rook Das macht keinen Sinn.
4 Stimmen
Nicht die Frage, die gestellt wurde, aber Sie sollten auch $(...) für die Befehlssubstitution bevorzugen (z.B.
"$(id -nu)" = "$someuser"
in Ihrem obigen Code. Im Gegensatz zu [[...]] ist die $(...)-Substitution Teil von POSIX, und nur die ältesten Shells verstehen sie nicht; sie vermeidet einige überraschende Verschachtelungen und Zitate, die man bei Backticks findet.2 Stimmen
Wenn jemand versucht, Ihnen zu sagen, dass Sie etwas anders machen sollen, dies aber nicht begründen kann, dann gibt es ein Problem mit diesem Weg, wenn Ihr Weg gut funktioniert. Ich glaube nicht, dass ich jemals jemanden gesehen habe, der in SO vorschlägt, "es einfach zu akzeptieren und zu benutzen".
2 Stimmen
Wie @JosipRodin sagte, habe ich Zweifel, wenn jemand behauptet, eine Verbesserung zu kennen, aber nicht erklären kann, was tatsächlich besser ist. Abgesehen davon, dass bei jeder Änderung in einigen arbeiten Code, besteht die Gefahr, dass er kaputt geht. Ändern Sie ihn also vielleicht, wenn Sie ihn aus irgendeinem Grund ändern müssen, aber lassen Sie ihn, wenn es keinen gibt.
0 Stimmen
Komisch, dass dieser Nutzer das Gegenteil empfiehlt: stackoverflow.com/a/13408590/1202615