Was ist / usr / bin / [und wie verwende ich es?

26

Ich war auf der Suche auf coreutils und fand diese als eine der im Rahmen enthaltenen Dateien von coreutils: /usr/bin/[. Was ist [und was macht es?

Es ist eine ausführbare Datei. Ich weiß einfach nicht, was es macht oder wie man es benutzt.

$ file / usr / bin / [
/ usr / bin / [: ELF-32-Bit-LSB-Programm, Intel 80386, Version 1 (SYSV), dynamisch verknüpft (verwendet gemeinsam genutzte Bibliotheken), für GNU / Linux 2.6.15, entfernt

Wenn ich versuche, es auszuführen, denke ich, dass es standardmäßig die eingebaute Zeilenerweiterung Bash ist. Anstatt die Datei tatsächlich auszuführen.

$ "/ usr / bin / ["
/ usr / bin / [: missing ] ']' $ /usr/bin/\[
/usr/bin/[: missing

Nelaaro
quelle
2
man [funktioniert unter OS X.
Daniel Beck

Antworten:

33

Es ist eine Entsprechung des Befehls test. (Siehe info test.) Im Allgemeinen verwenden Sie es in Skripten in bedingten Ausdrücken wie:

if [ -n "$1" ]; then
    echo $1
fi

Die schließende Klammer wird benötigt, um die Bedingung einzuschließen. (Nun, es sieht so aus, als ob es nur erforderlich wäre, um im Code besser auszusehen. Kennt jemand einen anderen praktischen Grund dafür?)

Rajish
quelle
3
Beachten Sie, dass [ist sowohl eine Schale und ein externes Programm mit dem gleichen (oder ähnlichen) verbrauch eingebaut. In der Bash, wenn Sie ausführen [oder testdas integrierte Programm aufrufen.
Grawity
Dies ist erforderlich, da die Syntax in bestimmten Situationen mehrdeutig wäre, wenn sie optional wäre.
Random832
20

Es entspricht dem testBefehl.

Anstatt

if /usr/bin/test -z "$VAR"
then
    echo VAR not set
fi

Sie können verwenden:

if /usr/bin/[ -z "$VAR" ]
then
    echo VAR not set
fi

Es kann auch in Schleifen verwendet werden:

i=0
while [ $i -lt 10 ]
do
   echo $i
   ((i++))
done

Sie können sie auch in Einzeiler wie folgt verwenden:

[ -z "$VAR" ] && echo VAR not set && exit

[ -f foo.txt ] && cat foo.txt
Dogbane
quelle
2
nette Beispiele, wie man es benutzt. "if / usr / bin / ["
nelaaro