
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 test
Befehl.
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