W moim bash test
ma postawę, aby wyjść ze stanu 0
:BASH: [] (test) zachowuje unconformly
$ test -n && echo true || echo false
-> true
podczas
$ test -n "" && echo true || echo false
-> false
To znaczy, gdy nie otrzymują żadnego argumentu w ogóle przyjmuje wartość niezerową.
Sprawa -z
działa prawidłowo zamiast:
$ test -z && echo true || echo false
-> true
$ test -z "" && echo true || echo false
-> true
Czy to jest normalne zachowanie?
Dobre pytanie. Zastanawiam się również, dlaczego oba powiodły się zarówno test -n jak i test -z (bez argumentów). –
Proszę uważnie z '&&' i '||'! Wypróbuj ten kod: 'touch ~/x && touch/x || echo fail' - jeśli 'touch/x' nie powiedzie się,' fail' zostanie wydrukowany! – uzsolt