
Ä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 builtin
sie jedoch help
an, 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.
Antwort2
Für command
ist die unmittelbare Erklärung wahrscheinlich, dass ksh dasselbe macht (zumindest tun ATT ksh93, pdksh und mksh nichts, wenn Sie sie command
ohne 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 foo
sehr ä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, welchecommand
ist nicht (die Begründung erklärt, warum nicht). Das sieht nach einem Fehler in ksh93 aus.
Zeigt in ksh builtin
eine Liste der integrierten Dienstprogramme an, was nützlich ist.
type
ist 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.