Non c'è alcuna differenza funzionale, rendendo questa una scelta puramente stilistica senza linee guida ampiamente accettate. The bash-hackers wiki ha una sezione estesa sul classico (conforme a POSIX) test
, con una grande attenzione alle migliori pratiche e alle insidie, e non ha alcuna posizione su cui preferire.
Inoltre, the POSIX specification for test
- mentre fa marchio una grande quantità di funzionalità obsolescent - specifica né forma preferita all'altra.
Detto questo, uno dei vantaggi di test
è che è meno propizio per le persone attirare aspettative da altre lingue che si traducono in codice rotto o buggato. Ad esempio, è un errore comune scrivere , ma la gente non è vista per scrivere test$foo=1
: È più visivamente ovvio che lo test "$foo" = 1
stia seguendo le stesse regole di analisi degli altri comandi della shell, e quindi richiede la stessa cura per quanto riguarda quoting e whitespace.
[1] Come -a
, -o
, (
e )
, e qualsiasi utilizzo con più di quattro argomenti (escluso il trascinamento ]
in un'istanza iniziato sotto il nome [
).
fonte
2016-06-23 20:36:35
Sì, sono entrambi validi. No, non c'è una ragione particolare per preferire l'una rispetto all'altra - è una scelta stilistica. –
'test' genererà probabilmente un fork di processo e quindi sarà meno efficiente. –
@WillemVanOnsem, su una shell dove 'test' non è un builtin, quindi userà anche un esterno'/usr/bin/['- cercalo, il tuo sistema operativo * lo * spedisce come binario esterno (spesso, un hardlink allo stesso inode di/usr/bin/test', che osserva il suo 'argv [0]' per vedere come è stato chiamato e decide se scartare un trailing ']' dal suo argomento elenco). –