Ich bin immer wieder überrascht, dass sich in dem Ordner /bin
ein [
Programm befindet.
Heißt das, wenn wir etwas machen wie if [ something ]
:?
Wenn Sie das [
Programm explizit in einer Shell aufrufen, werden Sie nach einer Entsprechung gefragt. ]
Wenn Sie die schließende Klammer angeben, scheint es nichts zu tun, unabhängig davon, was zwischen den Klammern steht.
Es erübrigt sich zu erwähnen, dass der übliche Weg, Hilfe zu einem Programm zu erhalten, nicht funktioniert, dh weder funktioniert man [
noch [ --help
.
man '['
funktioniert gut für mich - entweder hast du vergessen zu zitieren [
oder du hast eine andere Definition von "funktioniert".
[
Wertet die Argumente aus, sodass Sie zwischen allen Leerzeichen einfügen müssen. [ a=b ]
ist kein Vergleich: es ist immer wahr (es ist eine einzelne Zeichenfolge: "a = b", die immer als wahr ausgewertet wird ) und Sie sollten die Anzahl der Argumente auf 4 begrenzen (auch wenn die jüngsten Implementierungen mehr zulassen. Die Beschränkung auf 4 macht es portabler. Beispiel: [ "a" = "b" ]
Hat bereits 4 Argumente: "a" = "b" und das nicht notwendige Ende des Tests arg: "]"). Wenn Sie mehr brauchen: Kettentests mit zum Beispiel:if [ "$Var_a" = "foo" ] && [ "$Var_b" = "bar" ] ; then : do something ; fi
!
für sich (ohne Flucht und ohne Anführungszeichen) wird nicht ersetzt und wäre noch besser if ! [ ...
. Alle Bash-Erweiterungen, die verwendet werden, !
beinhalten mindestens die Erweiterung für andere Charaktere
[
-builtin gibt bash
(und möglicherweise auch andere Shells), und dass dies anstelle von verwendet werden kann /bin/[
. Es gibt auch den test
Befehl -command, der auf vielen Systemen eine symbolische Verknüpfung zu /bin/[
(oder umgekehrt) darstellt, auf anderen jedoch einen separaten Befehl.
[
bezieht sich auftest
Befehl, aber nichtexpr
, so sollte es seinman test