
Similar a¿Por qué los parámetros del sistema integrado de Bash son opcionales?, estos comandos no imprimen nada y devuelven el código de salida 0 si no se proporcionan parámetros. Pero a diferencia de builtin
, su help
resultado indica queal menos un parámetro es obligatorio. ¿Es esto un error, una característica o entendí mal algo?
$ 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
Respuesta1
POSIX cree que el parámetro de comando es obligatorio. Entonces podría ser un error.
Respuesta2
Para command
, la explicación inmediata es probablemente que ksh hace lo mismo (al menos ATT ksh93, pdksh y mksh no hacen nada cuando se ejecuta command
sin argumentos, no tengo ATT ksh88 para probar).
Por qué ksh se comporta de esa manera, no lo sé. Una explicación tentativa es que command foo
se parece mucho a foo
, y si omite foo
, obtendrá un comando de shell que no hace nada (pero aún realiza redirecciones). Curiosamente, con ksh 93s+ 2008-01-31 (pero no con pdksh, mksh, bash, ash o zsh), ksh -c 'foo=bar command; echo $foo'
se muestra bar
, lo que significa que la asignación se trata como una asignación de variable de shell y no como una asignación de entorno local de comando. Este comportamiento se espera sólo deutilidades integradas especiales, cualcommand
no lo es (la justificación explica por qué no). Esto parece un error en ksh93.
En ksh, builtin
muestra una lista de utilidades integradas, lo cual es útil.
type
Es un caso diferente: acepta múltiples argumentos e informa sobre cada uno de ellos por turno (p. ej type ls cd
.). Tener cero argumentos es una continuación natural de este comportamiento.