Es gibt keinen funktionalen Unterschied, was dies zu einer reinen Stilwahl ohne allgemein akzeptierte Richtlinien macht. The bash-hackers wiki hat einen erweiterten Abschnitt auf klassische (POSIX-konforme) test
, mit viel Aufmerksamkeit auf Best Practices und Fallstricke, und nimmt keine Position, auf die zu bevorzugen.
Außerdem the POSIX specification for test
- während es tut Marke viel Funktionalität obsolescent - gibt weder Form als über den anderen bevorzugt.
Das sagte, ein Vorteil zu test
ist, dass es weniger förderlich ist, dass Leute Erwartungen in andere Sprachen bringen, die in gebrochenem oder fehlerhaftem Code resultieren. Zum Beispiel ist es ein häufiger Fehler zu schreiben [$foo=1]
anstatt der richtigen [ "$foo" = 1 ]
, aber Leute sind nicht weit zu sehen test$foo=1
zu schreiben: Es ist optisch offensichtlich, dass test "$foo" = 1
die gleichen Parsing-Regeln wie andere Shell-Befehle folgt, und erfordert daher die gleiche Sorgfalt in Bezug auf Zitate und Leerzeichen.
[1] Wie -a
, -o
, (
und )
, und jede Nutzung mit mehr als vier Argumenten (mit Ausnahme des Hinter ]
auf einer Instanz gestartet unter dem Namen [
).
Ja, sie sind beide gültig. Nein, es gibt keinen besonderen Grund, einen zu bevorzugen - es ist eine stilistische Entscheidung. –
'test' wird wahrscheinlich zu einer Prozessgabel führen und somit weniger effizient sein. –
@WillemVanOnsem, auf einer Shell, wo 'test' nicht eingebaut ist, dann wird es auch ein externes'/usr/bin/['- suchen, Ihr Betriebssystem * liefert das als ein external binary (oft ein Hardlink zum gleichen Inode wie '/ usr/bin/test', der auf sein' argv [0] 'schaut, um zu sehen, wie es aufgerufen wurde und entscheiden, ob man ein nachstehendes'] 'von seinem Argument verwerfen soll Liste). –