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



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?)


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

2
nette Beispiele, wie man es benutzt. "if / usr / bin / ["
nelaaro
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.