Nie ma żadnej różnicy funkcjonalnej, co czyni ten wybór czysto stylistycznym bez powszechnie akceptowanych wytycznych. The bash-hackers wiki ma rozszerzoną sekcję klasycznej (zgodnej z POSIX) test
, z dużą dbałością o najlepsze praktyki i pułapki, i nie zajmuje stanowiska, które preferowałoby.
Ponadto the POSIX specification for test
- podczas gdy robi znak sporo funkcjonalności przestarzałych - określa ani formy jako preferowany nad innymi.
To powiedziawszy, jedną z korzyści dla test
jest to, że jest mniej sprzyjający dla ludzi, którzy wywołują oczekiwania z innych języków, co skutkuje uszkodzeniem lub błędnym kodem. Na przykład częstym błędem jest pisanie [$foo=1]
, a nie poprawnego [ "$foo" = 1 ]
, ale ludzie nie są powszechnie postrzegani jako piszący test$foo=1
: Bardziej wizualnie oczywiste jest, że test "$foo" = 1
przestrzega tych samych reguł parsowania, co inne polecenia powłoki i dlatego wymaga tej samej opieki dotyczące cytowania i białych znaków.
[1] taki jak -a
, -o
, (
i )
i jakiegokolwiek zastosowania z więcej niż czterema argumentów (z wyjątkiem tylnego ]
na wystąpienie rozpoczęto pod nazwą [
).
Tak, oba są prawidłowe. Nie, nie ma konkretnego powodu, aby preferować jeden nad drugim - jest to wybór stylistyczny. –
'test' prawdopodobnie spowoduje rozwidlenie procesu, a tym samym będzie mniej wydajne. –
@WillemVanOnsem, w powłoce, w której 'test' nie jest wbudowany, to będzie również używać zewnętrznego'/usr/bin/["szukaj tego, twój system operacyjny * nie * wysyła to jako zewnętrzny plik binarny (często twardy link do tego samego i-węzła, jak '/ usr/bin/test', który analizuje jego' argv [0] ', aby zobaczyć, jak został wywołany i zdecydować, czy odrzucić końcowe'] 'z jego argumentu lista). –