Warum sind die Parameter für „Befehl“ und „Typ“ von Bash optional?

Warum sind die Parameter für „Befehl“ und „Typ“ von Bash optional?

Ähnlich zuWarum sind Parameter für die integrierten Funktionen von Bash optional?geben diese Befehle nichts aus und geben den Exit-Code 0 zurück, wenn keine Parameter angegeben werden. Im Gegensatz zu geben builtinsie jedoch helpan, dassmindestens ein Parameter ist obligatorisch. Ist das ein Fehler, ein Feature oder habe ich etwas falsch verstanden?

$ bash --version
GNU bash, version 4.2.10(1)-release (x86_64-pc-linux-gnu)
$ type -a command
command is a shell builtin
$ type -a type
type is a shell builtin
$ help -s command
command: command [-pVv] command [arg ...]
$ help -s type
type: type [-afptP] name [name ...]
$ command
$ echo $?
0
$ type
$ echo $?
0

Antwort1

POSIX geht davon aus, dass der Befehlsparameter erforderlich ist. Es könnte sich also um einen Fehler handeln.

POSIX 2008-Befehlsspezifikation

Antwort2

Für commandist die unmittelbare Erklärung wahrscheinlich, dass ksh dasselbe macht (zumindest tun ATT ksh93, pdksh und mksh nichts, wenn Sie sie commandohne Argument ausführen, ich habe kein ATT ksh88 zum Testen).

Warum sich ksh so verhält, weiß ich nicht. Eine vorläufige Erklärung ist, dass es command foosehr ähnlich ist foo, und wenn Sie weglassen foo, erhalten Sie einen Shell-Befehl, der nichts tut (aber trotzdem Umleitungen durchführt). Seltsamerweise zeigt ksh 93s+ 2008-01-31 (aber nicht pdksh, mksh, bash, ash oder zsh) ksh -c 'foo=bar command; echo $foo'an bar, was bedeutet, dass die Zuweisung als Shell-Variablenzuweisung und nicht als Befehls-lokale Umgebungszuweisung behandelt wird. Dieses Verhalten wird nur von erwartetspezielle integrierte Dienstprogramme, welchecommandist nicht (die Begründung erklärt, warum nicht). Das sieht nach einem Fehler in ksh93 aus.

Zeigt in ksh builtineine Liste der integrierten Dienstprogramme an, was nützlich ist.

typeist ein anderer Fall: Es akzeptiert mehrere Argumente und meldet jedes nacheinander (z. B. type ls cd). Null Argumente zu haben ist eine natürliche Fortsetzung dieses Verhaltens.

verwandte Informationen