Soweit ich weiß, [[
handelt es sich um eine erweiterte Version von [
, aber ich bin verwirrt, wenn ich [[
als Schlüsselwort sehe und [
als eingebaut angezeigt werde.
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
TLDP sagt
Ein Builtin kann ein Synonym für einen Systembefehl mit demselben Namen sein, Bash implementiert ihn jedoch intern neu. Beispielsweise ist der Befehl "Bash echo" nicht mit "/ bin / echo" identisch, obwohl sein Verhalten nahezu identisch ist.
und
Ein Schlüsselwort ist ein reserviertes Wort, ein Token oder ein Operator. Schlüsselwörter haben eine besondere Bedeutung für die Shell und sind in der Tat die Bausteine der Shell-Syntax. Als Beispiele für, while, do und! sind Schlüsselwörter. Ähnlich wie ein eingebautes Schlüsselwort ist ein Schlüsselwort fest in Bash codiert, aber im Gegensatz zu einem eingebauten Schlüsselwort ist ein Schlüsselwort an sich kein Befehl, sondern eine Untereinheit eines Befehlskonstrukts. [2]
Sollte das nicht beides [
und [[
ein Schlüsselwort sein? Fehlt mir hier etwas? Außerdem bestätigt dieser Link , dass beide zur selben Art gehören [
und [[
gehören sollten.
if "[" $x -eq 3 ]
wie erwartet (weil Bash nach dem aufgerufenen Befehl sucht [
und dieser existiert), if "[[" $x -eq 3 ]]
funktioniert aber nicht (weil Bash erneut nach einem Befehl mit dem entsprechenden Namen sucht, aber es gibt keinen [[
Befehl).
/usr/bin/echo
, aber das heißt nicht, dass es nicht eingebaut ist .