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

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

Ich habe mir die Coreutils angesehen und dies als eine der Dateien gefunden, die Teil der Coreutils sind: /usr/bin/[. Was ist das [und was macht es?

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

$ file /usr/bin/[  
/usr/bin/[: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared  libs), for GNU/Linux 2.6.15, stripped  

Wenn ich versuche, es auszuführen, greift es meiner Meinung nach standardmäßig auf die in Bash integrierte Zeilenerweiterung zu, anstatt die Datei tatsächlich auszuführen.

$ "/usr/bin/["
/usr/bin/[: missing ‘]’
$ /usr/bin/\[
/usr/bin/[: missing ‘]’

Antwort1

Es entspricht dem Befehl test. (Siehe info test.) Normalerweise verwenden Sie es in Skripten in bedingten Ausdrücken wie:

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

Die schließende Klammer ist erforderlich, um den Bedingungssatz einzuschließen. (Nun, es sieht so aus, als wäre sie nur erforderlich, damit der Code besser aussieht. Kennt jemand einen anderen praktischen Grund dafür?)

Antwort2

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 Einzeilern wie diesem verwenden:

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

[ -f foo.txt ] && cat foo.txt

verwandte Informationen