Zawsze jestem zaskoczony, że w folderze /bin
jest [
program.
Czy tak się nazywa, gdy robimy coś takiego if [ something ]
:?
Wywołując [
program jawnie w powłoce, prosi o odpowiedni ]
, a kiedy dostarczam nawias zamykający, wydaje się, że nie robi nic, bez względu na to, co wstawię między nawiasy.
Nie trzeba dodawać, że zwykły sposób uzyskiwania pomocy na temat programu nie działa, tzn. Ani man [
nie [ --help
działa.
man '['
działa dla mnie dobrze - albo zapomniałeś zacytować, [
albo masz inną definicję „dzieł”.
[
ocenia swoje argumenty, więc musisz mieć spacje między nimi wszystkimi. [ a=b ]
nie jest porównaniem: zawsze będzie prawdziwe (jest to pojedynczy ciąg: „a = b”, który zawsze jest oceniany jako prawda ) I powinieneś ograniczyć liczbę argumentów do 4 (nawet jeśli ostatnie implementacje pozwolą na więcej .. , ograniczenie do 4. czyni go bardziej przenośnym, na przykład: [ "a" = "b" ]
ma już 4 argumenty: „a” „=„ „b” i niepotrzebny koniec testu arg: „]”). Jeśli potrzebujesz więcej: testy łańcuchowe, na przykład:if [ "$Var_a" = "foo" ] && [ "$Var_b" = "bar" ] ; then : do something ; fi
!
sam (bez kształtów i bez cudzysłowów) nie zostanie zastąpiony, a nawet lepiej if ! [ ...
. Wszystkie używane rozszerzenia bash !
obejmują przynajmniej inną postać
[
-builtin w bash
(i ewentualnie także innych powłokach), i że można go użyć zamiast /bin/[
. Istnieje również test
polecenie, które w wielu systemach jest dowiązaniem symbolicznym do /bin/[
(lub odwrotnie), ale w innych jest osobnym poleceniem.
[
odnosi się dotest
polecenia, ale nieexpr
powinno tak byćman test