Heute bin ich auf einen interessanten Befehl gestoßen ‚[ ‘ (eckige Klammer) über den berühmten Linux-Blog namens nixCraft. Es war ein ziemlich interessanter Beitrag, der die Verwendung von „/usr/bin/[“ erklärte ‘-Befehl unter Linux. Aber weißt du was, ich arbeite jetzt seit einigen Jahren mit Linux und kannte diesen Befehl nicht, bis dieser Tweet von Nixcraft in meinem Newsfeed auftauchte. Ich habe es von euch gelernt, danke.
Nun, ich schreibe diesen Beitrag, um zu teilen, was ich von nixCraft gelernt habe. Grundsätzlich „/usr/bin/[ ‘ Befehl ist gleich dem ‘test ‘-Befehl unter Linux. Lass es mich erklären.
Wenn Sie in der Shell-Programmierung jemals überprüfen möchten, ob eine bestimmte Datei existiert oder nicht, verwenden Sie normalerweise IF cond isn’t? Etwas wie das unten gezeigte:
if [ -f /etc/passwd ] then echo "Yes" else echo "No" fi
Wenn nun „/etc/passwd ‘ existiert, dann sehen Sie die Ausgabe „Ja ” sonst „Nein “. Das ist einfach und Sie können dasselbe auch tun, um Werte zu vergleichen. Aber haben Sie bemerkt, dass „[ ‘ Klammer nach ‘if ‘? Dort ist’/usr/bin/[ ‘ kommt in die Szene.
Alternativ können Sie wie folgt prüfen, ob die Datei existiert oder nicht (ohne IF):
[demo ~]$ [ -f /etc/passwd ] && echo "Yes" || echo "No" Yes [demo ~]$ [ -f /etc/passwd1 ] && echo "Yes" || echo "No" No
Im obigen Snippet sehen Sie ‘[‘ Befehl. Wie gesagt, der Befehl ist gleich ‚test ‘. Schauen Sie sich das folgende Beispiel an:
if test -f /etc/passwd then echo "Yes" else echo "No" fi
Ok, beides „[ ‘ und ‚testen ‘ macht die gleiche Arbeit, aber sind sie symbolisch verknüpft? Ich habe das auch überprüft, aber sie sind es nicht.
[demo ~]$ ls -l /usr/bin/test -rwxr-xr-x 1 root root 30064 Mar 21 2012 /usr/bin/test
[demo ~]$ ls -l /usr/bin/[ -rwxr-xr-x 1 root root 32296 Mar 21 2012 /usr/bin/[
Grundsätzlich „[ ‘ ist ein eingebauter Shell-Befehl. Bestätigen Sie es mit „tippen“. ‘ Befehl wie folgt:
[demo ~]$ type -a [ [ is a shell builtin [ is /usr/bin/[
Hinweis: Sie sehen „[ ‘ ist ein eingebauter Befehl in Linux. Das heißt, wenn der Befehl keine Schrägstriche enthält, versucht SHELL, ihn über PATH zu finden Variable.
Da es sich um einen Befehl handelt, sollte es eine Manpage geben, nicht wahr?
[demo ~]$ man [ No manual entry for [
Ich konnte keine Manpage für „[“ finden ‘, dann sah ich die Manpage von ‚test ‘, wo unten eine Notiz war, die über ‘[’ sagt ‘. Siehe unten:
[demo ~]$ man test ::::::::::::: NOTE: your shell may have its own version of test and/or [, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supports.
Bonus … Wie ‘[‘ gibt es auch ‘[[‘
[demo ~]$ type -a [[ [[ is a shell keyword
„[[ ‘ ist eigentlich ein Schlüsselwort, das anderen Schlüsselwörtern in SHELL ähnelt – ‘! until do done select elif else esac fi for case function if [[ ]] in then while { } time ‘
Da es sich um ein Schlüsselwort handelt, können Sie es nicht als Befehl finden.
[demo ~]$ ls -l /usr/bin/[[ ls: /usr/bin/[[: No such file or directory
[demo@gridfs ~]$ whereis [[ [[: